2012-11-16 129 views
6

我在EC2上使用专有实例从RabbitMQ队列中使用。每项工作都需要几秒钟,并需要手动“确认”。RabbitMQ“Zombie”消费者

实例终止时出现问题。没有时间彻底关闭AMQP消费者,所以我留下的RabbitMQ服务器仍然认为死亡的消费者仍然存在。它不会重新提供他们的工作,并且仍然为他们创造新的工作机会。

我该如何让RabbitMQ自动超时僵尸使用者并将其从工作池中移除?

回答

5

我建议在RabbitMQ连接上设置Heartbeat属性。如果心跳停止,RabbitMQ最终会切断连接,并将未消息消息放回队列中。

1

我与您位于同一地点,并通过在客户端设置连接心跳属性(使用node_amqp模块的Node.Js)来解决此问题。连接关闭,并与“僵尸”消费者一起移除。未完成的工作返回就绪。