我的Java应用程序向RabbitMQ交换发送消息,然后交换重定向消息到绑定队列.我在RabbitMQ中使用Springframework AMQP java插件.
问题:消息进入队列,但它保持"未确认"状态,它永远不会变为"就绪".
可能是什么原因?
我有一个简单的RabbitMQ测试程序随机排队消息,另一个读取它们,都使用Spring-AMQP.如果消费者死亡(例如,在没有机会关闭其连接或通道的情况下终止进程),则任何未确认的消息似乎永远不会被确认.
我已经看到了许多引用(例如这个问题),它说当通道在没有连接时死亡,并且将重新传送剩余的未包装的消息.这不是我看到的行为 - 相反,我得到了一个越来越多的标记为IDLE的频道列表,以及越来越多的标记正在运行但没有活动的连接列表.
一旦进程被杀死,是否需要一些配置才能注意到连接已经死亡?
编辑: 我在VirtualBox VM中运行rabbitmq服务器,显然无法通过NAT正确管理死入站连接.这对于直接在物理主机上运行的mq服务器来说效果很好.
我有以下设置:
我在码头工人的容器中运行芹菜,所以当我重建码头工人时,芹菜工人没有优雅地关闭.这是可以的,如果没有确认任务,因为一旦工人再次在新的docker容器中,经纪人会将它们发回去,但在其他情况下,他们将会丢失.
在花管理面板中,预取任务已收到状态.
我仔细阅读了官方文档和相关问题,直觉上我觉得我的设置中的预取任务得到了认可.是这样吗?