RabbitMQ“僵尸”消费者

7
我正在使用EC2的spot instances从RabbitMQ队列中消费。每个任务需要几秒钟,并需要手动进行“ack”确认。
当实例终止时会出现问题。没有时间进行AMQP消费者的干净关闭,因此我还是会发现RabbitMQ服务器仍然认为已经死掉的消费者存在。它不会重新传递他们的作业,并且仍然将新作业路由到它们身上。
我该如何让RabbitMQ自动超时并从工作池中删除僵尸消费者呢?
2个回答

6

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


1
我曾经遇到和你一样的问题,通过在消费者端设置连接心跳属性(使用node_amqp模块的Node.Js)来解决了这个问题。连接被关闭和移除,同时也清除了“僵尸”消费者。未确认的作业会回到Ready状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接