我有一个简单的RabbitMQ测试程序随机排队消息,另一个读取它们,全部使用Spring-AMQP。如果消费者死亡(例如,在没有机会关闭其连接或通道的情况下杀死一个进程),则任何未被确认的消息似乎永远都不会被确认。没有连接的AMQP/RabbitMQ频道何时死亡?
我见过很多参考文献(例如this question),表示通道在没有连接的情况下死亡,剩余的未被删除的消息将被重新发送。这不是我看到的行为 - 相反,我获得了越来越多的标记为IDLE的频道列表,以及越来越多的标记为正在运行但没有活动的连接列表。
是否有一些配置需要注意,一旦进程被终止,连接已经死亡?
编辑: 我在一个VirtualBox虚拟机内运行rabbitmq服务器,这显然不能通过NAT正确管理死入站连接。这对于直接在物理主机上运行的mq服务器来说很好。
FYI:我在这里独家队列没有被清理的经纪人及时专属消费死后类似的问题。这阻止了具有确定性名称的这些组件从开始。它是由ConnectionFactory.RequestedHeartbeat''设置为较小的值(秒) – drstevens