【轉載】關於RabbitMQ的消息確認


      RabbitMQ 將消息投遞到客戶端後,客戶端若是沒處理完這個消息就死掉了,這個消息還會不會存在?這取決於 RabbitMQ 的消息確認機制(Message acknowledgment)是否打開。
shell

      爲了確保消息不會丟失,RabbitMQ 支持消息確認機制。(在開啓了消息確認機制後)客戶端須要在收到消息並處理完後,發送一個 ack 消息給 RabbitMQ,告訴它該消息能夠被安全刪除了。假如客戶端在發送 ack 以前意外死掉了,那麼 RabbitMQ 會將消息投遞到下一個 consumer 客戶端。若是有多個 consumer 客戶端,RabbitMQ 在投遞消息時是輪詢的。 安全

      RabbitMQ 如何判斷客戶端死掉了?惟一根據是客戶端鏈接是否斷開。這裏沒有超時機制,也就是說客戶端能夠處理一個消息很長時間,只要沒斷開鏈接,RabbitMQ 就一直等待 ack 消息。 spa

消息確認機制默認打開的,除非你設置 no_ack=True 標記來手工關閉它。 code

經過以下命令查看系統裏的未確認消息: orm

#rabbitmqctl list_queues -p /path name messages_unacknowledged
Listing queues …
queue_storm_actionlog 0
dev_queue_storm_actionlog 0
…done.
相關文章
相關標籤/搜索