天天看點

如何確定消息正确地發送至 RabbitMQ? 如何確定消息接收方消費了消息?

發送方确認模式 

将信道設定成 confirm 模式(發送方确認模式),則所有在信道上釋出的消息都 

會被指派一個唯一的 ID。

一旦消息被投遞到目的隊列後,或者消息被寫入磁盤後(可持久化的消息),信 

道會發送一個确認給生産者(包含消息唯一 ID)。

如果 RabbitMQ 發生内部錯誤進而導緻消息丢失,會發送一條 nack(not

acknowledged,未确認)消息。

發送方确認模式是異步的,生産者應用程式在等待确認的同時,可以繼續發送消 

息。當确認消息到達生産者應用程式,生産者應用程式的回調方法就會被觸發來 

處理确認消息。

接收方确認機制 

接收方消息确認機制 

消費者接收每一條消息後都必須進行确認(消息接收和消息确認是兩個不同操 

作)。隻有消費者确認了消息,RabbitMQ 才能安全地把消息從隊列中删除。

這裡并沒有用到逾時機制,RabbitMQ 僅通過 Consumer 的連接配接中斷來确認是否 

需要重新發送消息。也就是說,隻要連接配接不中斷,RabbitMQ 給了 Consumer 足 

夠長的時間來處理消息。保證資料的最終一緻性;

下面羅列幾種特殊情況 

如果消費者接收到消息,在确認之前斷開了連接配接或取消訂閱,RabbitMQ 會認為 

消息沒有被分發,然後重新分發給下一個訂閱的消費者。(可能存在消息重複消 

費的隐患,需要去重)

如果消費者接收到消息卻沒有确認消息,連接配接也未斷開,則 RabbitMQ 認為該消 

費者繁忙,将不會給該消費者分發更多的消息。

Java Program!