目錄mq丟失資訊
消費者丟失資訊
之前我們簡單介紹了rabbitmq的功能。他的作用就是方便我們的訊息解耦。緊接著問題就會暴露出來。解耦就設計到雙方系統不穩定問題。在mq中有生產者、mq、消費者三個角色。其中乙個角色down機或者重啟後。就設計到訊息的丟失問題。因為mq整個訊息週期設計到上述的三個角色,所以我們從這個三個角色開始討論丟失資料的情況。並如何解決
實際案列1:
實際案例2:
總結:解決方案:
mapresultmap = new hashmap()
};string msg = "";
integer index = 0;
if (params.containskey("msg"))
if (params.containskey("index"))
if (index != 0)
rabbittemplate.convertandsend(rabbitconfig.topicexchange, "zxh", msg);
return resultmap;
string msg = "trantest";
connection connection = rabbittemplate.getconnectionfactory().createconnection();
channel channel = connection.createchannel(true);
try catch (ioexception e)
channel.txcommit();
connection.close();
connection connection = rabbittemplate.getconnectionfactory().createconnection();
channel channel = connection.createchannel(false);
channel.confirmselect();
try catch (ioexception e)
boolean b = channel.waitforconfirms();
if (b)
system.out.println("end1");
channel.confirmselect();
channel.basicpublish(rabbitconfig.topicexchange, "zxh", null, msg.getbytes());
channel.addconfirmlistener(new confirmlistener()
@override
public void handlenack(long deliverytag, boolean multiple) throws ioexception
});system.out.println("end2");
channel.close();
connection.close();
string msg = "hello world!";
connection connection = rabbittemplate.getconnectionfactory().createconnection();
channel channel = connection.createchannel(false);
channel.confirmselect();
//return機制:監控交換機是否將訊息分發到佇列
channel.addreturnlistener(new returnlistener()
});//傳送訊息
"ex2", "c", null, msg.getbytes());
channel.basicpublish(rabbitconfig.directexchange, "c", true, null, msg.getbytes());
channel.addconfirmlistener(new confirmlistener()
@override
public void handlenack(long deliverytag, boolean multiple) throws ioexception
});
mq事務開啟分析
當訊息回滾到訊息佇列時,這條訊息不會回到佇列尾部,而是仍是在佇列頭部,這時消費者會又接收到這條訊息,如果想訊息進入隊尾,須確認訊息後再次傳送訊息。
RabbitMQ 如何保證訊息不丟失?
rabbitmq 如何保證訊息不丟失?rabbitmq一般情況很少丟失,但是不能排除意外,為了保證我們自己系統高可用,我們必須作出更好完善措施,保證系統的穩定性。下面來介紹下,如何保證訊息的絕對不丟失的問題,下面分享的絕對乾貨,都是在知名網際網路產品的產線中使用。1.訊息持久化 2.ack確認機制 ...
Rabbitmq如何保證訊息順序執行
訊息佇列中的若干訊息如果是對同乙個資料進行操作,這些操作具有前後的關係,必須要按前後的順序執行,否則就會造成資料異常。舉例 比如通過mysql binlog進行兩個資料庫的資料同步,由於對資料庫的資料操作是具有順序性的,如果操作順序搞反,就會造成不可估量的錯誤。比如資料庫對一條資料依次進行了 插入 ...
RabbitMQ如何保證訊息不丟失
rabbitmq 大致有三種場景會發生訊息丟失 1 consumer沒有接收到訊息,消費之前 2 consumer接收到訊息,訊息暫存記憶體,還未消費 3 consumer消費時 第一種丟失場景就像我剛剛到達便利店,還沒選好買什麼商品,這個時候便利店突然斷電,無法消費 這種場景下使用message ...