發送方确認模式
将信道設定成 confirm 模式(發送方确認模式),則所有在信道上釋出的消息都
會被指派一個唯一的 ID。
一旦消息被投遞到目的隊列後,或者消息被寫入磁盤後(可持久化的消息),信
道會發送一個确認給生産者(包含消息唯一 ID)。
如果 RabbitMQ 發生内部錯誤進而導緻消息丢失,會發送一條 nack(not
acknowledged,未确認)消息。
發送方确認模式是異步的,生産者應用程式在等待确認的同時,可以繼續發送消
息。當确認消息到達生産者應用程式,生産者應用程式的回調方法就會被觸發來
處理确認消息。
接收方确認機制
接收方消息确認機制
消費者接收每一條消息後都必須進行确認(消息接收和消息确認是兩個不同操
作)。隻有消費者确認了消息,RabbitMQ 才能安全地把消息從隊列中删除。
這裡并沒有用到逾時機制,RabbitMQ 僅通過 Consumer 的連接配接中斷來确認是否
需要重新發送消息。也就是說,隻要連接配接不中斷,RabbitMQ 給了 Consumer 足
夠長的時間來處理消息。保證資料的最終一緻性;
下面羅列幾種特殊情況
如果消費者接收到消息,在确認之前斷開了連接配接或取消訂閱,RabbitMQ 會認為
消息沒有被分發,然後重新分發給下一個訂閱的消費者。(可能存在消息重複消
費的隐患,需要去重)
如果消費者接收到消息卻沒有确認消息,連接配接也未斷開,則 RabbitMQ 認為該消
費者繁忙,将不會給該消費者分發更多的消息。
Java Program!