【发布时间】:2012-03-22 19:24:18
【问题描述】:
我有一个简单的 RabbitMQ 测试程序随机排列消息,另一个读取它们,全部使用 Spring-AMQP。如果消费者死亡(例如在没有机会关闭其连接或通道的情况下终止进程),它没有确认的任何消息似乎永远保持未确认状态。
我看到许多参考资料(例如this question)说通道在没有连接时会死掉,并且剩余的未确认消息将被重新传递。这不是我看到的行为 - 相反,我得到越来越多的标记为 IDLE 的频道列表和越来越多的标记为正在运行但没有活动的连接列表。
是否需要进行一些配置才能在进程被终止后注意到连接已终止?
编辑: 我在 VirtualBox VM 中运行 rabbitmq 服务器,它显然不能通过 NAT 正确管理死的入站连接。这适用于直接在物理主机上运行的 mq 服务器。
【问题讨论】:
-
仅供参考:我遇到了类似的问题,在独占消费者死亡后,没有及时清理代理上的独占队列。这阻止了这些具有确定名称的组件启动。通过将
ConnectionFactory.RequestedHeartbeat设置为一个较小的值(秒)解决了这个问题
标签: java message-queue rabbitmq amqp spring-amqp