rabbitmq訊息重新入隊和訊息確認

2021-07-31 14:58:29 字數 876 閱讀 7552

為了確認訊息不會丟失,rabbitmq支援message acknowledgments。乙個ack的響應會從消費端返回,告訴rabbitmq乙個特定的訊息已被接收。

當rabbitmq空閒時會處理它,將它刪除。

如果乙個消費者掛掉(channel被關閉、connection被關閉或者tcp 連線被關閉)而沒有傳送ack,那麼rabbitmq會讓這個訊息重新入隊。

如果在同一時間內有其他的消費者連線了,他快被快速的投遞到其他的消費者那。即使工作者偶爾掛掉,這種方式下也可以確定沒有訊息會丟失。

沒有任何的訊息超時,當消費者掛掉,rabbitmq將重新投遞這些訊息。對於處理乙個訊息需要非常非常長的時間也沒關係因為不會超時。

訊息的ack預設是開啟的,預設標記是autoack=true,當完成了任務得到了ack響應那麼可以刪除掉這個標記,也就是autoack=false。

示例**在官網有詳細的說明:第二個選項 work queues頁中有message acknowledgment,選擇自己對應的語言即可。

basicrecover:是路由不成功的訊息可以使用recovery重新傳送到佇列中。

basicreject:是接收端告訴伺服器這個訊息我拒絕接收,不處理,可以設定是否放回到佇列中還是丟掉,而且只能一次拒絕乙個訊息,官網中有明確說明不能批量拒絕訊息,為解決批量拒絕訊息才有了basicnack。

basicnack:可以一次拒絕n條訊息,客戶端可以設定basicnack方法的multiple引數為true,伺服器會拒絕指定了delivery_tag的所有未確認的訊息(tag是乙個64位的long值,最大值是9223372036854775807)。

示例**:

官網中有明確的**示例:http:

api結合具體的業務應用。

rabbitMQ訊息重新入隊

basicrecover 是路由不成功的訊息可以使用recovery重新傳送到佇列中。basicreject 是接收端告訴伺服器這個訊息我拒絕接收,不處理,可以設定是否放回到佇列中還是丟掉,而且只能一次拒絕乙個訊息,官網中有明確說明不能批量拒絕訊息,為解決批量拒絕訊息才有了basicnack。bas...

訊息佇列 Kafka和rabbitMQ

0.建立topic bin kafka topics.sh create zookeeper localhost 2181 replication factor1 partitions1 topic test 1.檢視kafka topic列表 bin kafka topic.sh zoopkeep...

訊息佇列 RabbitMQ和Kafka

2種模式 點對點 consumer主動對queue監控,檢查是否收到訊息 優點 解耦 通過中介軟體通訊 冗餘 可做快取 擴充套件性順序保證 非同步通訊 consumer即使down掉,訊息還是儲存在queue,等consumer恢復會自動處理訊息 關於broker裡的exchange不可以直接將訊息...