Rabbitmq:代理重新启动后未确认的消息不会消失

waxmsbnn  于 12个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(147)

我们已经观察到RabbitMQ的以下行为,并试图了解它是否正确以及如何解决它。
场景:
1.(持久)消息被传递到持久队列中
1.(单个)消费者(Spring-AMQP)接受消息并开始处理=>消息从READY变为UNACK
1.现在代理关闭=>客户端正确报告“通道关闭”
1.消费者完成了处理,但是不能确认消息,因为代理仍然关闭

  1. Broker再次启动=>客户端重新连接
    结果,一条消息永远保持未确认状态(艾德)(或者直到客户端重新启动)。
    旁注:在Rabbit Admin UI中,我可以看到现在存在两个通道。在代理重新启动之前创建的“死”消息,包含未确认的消息和一个健康的新消息。
    这种行为是预期的吗?在我看来“正确”的方式,RabbitMQ不能知道后,经纪人重新启动,是否完成了消息处理或没有。但是,除了将未确认的消息返回到队列中并在不重新启动使用者进程的情况下修复系统之外,还有什么解决方案呢?
k0pti3hp

k0pti3hp1#

这种行为是预期的吗?在我看来“正确”的方式,RabbitMQ不能知道后,经纪人重新启动,是否完成了消息处理或没有。
是的,你正在观察预期的行为。一旦RabbitMQ确定消费者真的死了,它就会重新排队消息。由于您的消费者重新连接到必须与以前相同的消费者标签,因此由该过程来确认或否定消息。

相关问题