我有一個簡單的RabbitMQ測試程序隨機排隊消息,另一個讀取它們,全部使用Spring-AMQP。如果消費者死亡(例如,在沒有機會關閉其連接或通道的情況下殺死一個進程),則任何未被確認的消息似乎永遠都不會被確認。沒有連接的AMQP/RabbitMQ頻道何時死亡?
我見過很多參考文獻(例如this question),表示通道在沒有連接的情況下死亡,剩餘的未被刪除的消息將被重新發送。這不是我看到的行爲 - 相反,我獲得了越來越多的標記爲IDLE的頻道列表,以及越來越多的標記爲正在運行但沒有活動的連接列表。
是否有一些配置需要注意,一旦進程被終止,連接已經死亡?
編輯: 我在一個VirtualBox虛擬機內運行rabbitmq服務器,這顯然不能通過NAT正確管理死入站連接。這對於直接在物理主機上運行的mq服務器來說很好。
FYI:我在這裏獨家隊列沒有被清理的經紀人及時專屬消費死後類似的問題。這阻止了具有確定性名稱的這些組件從開始。它是由ConnectionFactory.RequestedHeartbeat''設置爲較小的值(秒) – drstevens