rabbitmq如何保證訊息可靠性不丟失

2022-06-14 08:33:09 字數 2303 閱讀 5730

目錄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 ...