我在 EC2 上使用 Spot 实例从 RabbitMQ 队列中消费。每个作业都需要几秒钟,并且需要手动“确认”。
实例终止时会出现问题。没有时间彻底关闭 AMQP 消费者,所以我留下的 RabbitMQ 服务器仍然认为死去的消费者仍然存在。它不会重新提供他们的工作,它仍然会为他们提供新的工作。
如何让 RabbitMQ 自动超时僵尸消费者并将其从工作池中删除?
我建议在 RabbitMQ 连接上设置Heartbeat属性。如果心跳停止,RabbitMQ 最终会切断连接并将未确认的消息放回队列中。
我和你在同一个地方,并通过在消费者端设置连接心跳属性来解决它(Node.Js 使用 node_amqp 模块)。与“僵尸”消费者一起关闭并删除了连接。未确认的作业返回到就绪状态。