2012-11-16 127 views
6

我在EC2上使用專有實例從RabbitMQ隊列中使用。每項工作都需要幾秒鐘,並需要手動「確認」。RabbitMQ「Zombie」消費者

實例終止時出現問題。沒有時間徹底關閉AMQP消費者,所以我留下的RabbitMQ服務器仍然認爲死亡的消費者仍然存在。它不會重新提供他們的工作,並且仍然爲他們創造新的工作機會。

我該如何讓RabbitMQ自動超時殭屍使用者並將其從工作池中移除?

回答

5

我建議在RabbitMQ連接上設置Heartbeat屬性。如果心跳停止,RabbitMQ最終會切斷連接,並將未消息消息放回隊列中。

1

我與您位於同一地點,並通過在客戶端設置連接心跳屬性(使用node_amqp模塊的Node.Js)來解決此問題。連接關閉,並與「殭屍」消費者一起移除。未完成的工作返回就緒。