没有连接的AMQP / RabbitMQ通道何时死亡?

我有一个简单的RabbitMQ测试程序随机排队消息,另一个读取它们,都使用Spring-AMQP。 如果消费者死亡(例如,在没有机会关闭其连接或通道的情况下终止进程),则任何未确认的消息似乎永远不会被确认。

我已经看到了许多引用(例如这个问题 ),它表示当通道没有连接时它会死亡,并且将重新传送剩余的未包装的消息。 这不是我看到的行为 – 相反,我得到了一个越​​来越多的标记为IDLE的频道列表,以及越来越多的标记正在运行但没有活动的连接列表。

一旦进程被杀死,是否需要一些配置来注意连接已经死亡?

编辑:我在VirtualBox VM中运行rabbitmq服务器,显然无法通过NAT正确管理死入站连接。 这对于直接在物理主机上运行的mq服务器来说效果很好。

AMQP使用队列和交换。 您在交换机上发布并绑定队列以从交换机获取消息(您可以在我的博客上看到简短的解释 。当您创建队列时,您可以将其设置为自动删除以及在它之前保持未使用的时间。自动删除。这是RabbitMQ quickref的引用:

queue.declare(短保留-1,队列名队列,位被动,位持久,位独占, 位自动删除 ,无等待无等待,表参数)➔initre-ok

支持:完整声明队列,根据需要创建。

此方法创建或检查队列。 创建新队列时,客户端可以指定控制队列及其内容持久性的各种属性,以及队列的共享级别。

RabbitMQ实现了对AMQP规范的扩展,允许队列的创建者控制其行为的各个方面。

每队列消息TTL此扩展确定发布到队列的消息在服务器丢弃之前可以存活多长时间。 使用此方法的arguments参数的x-message-ttl参数配置生存时间。

可以使用可选的租约时间声明队列到期队列。 租约时间确定队列在服务器自动删除之前可以保留未使用的时间。 租约时间在此方法的arguments参数中作为x-expires参数提供。

镜像队列我们为队列开发了主动/主动高可用性。 这可以通过允许队列在RabbitMQ集群中的其他节点上进行镜像来实现。 结果是,如果群集的一个节点发生故障,则队列可以自动切换到其中一个镜像并继续运行,而不会出现服务不可用的情况。 要创建镜像队列,请在此方法的arguments参数中提供x-ha-policy参数。

回答关闭。 事实certificate这不是一个真正的问题。

我在VirtualBox VM中运行rabbitmq服务器,显然无法通过NAT正确管理死入站连接。 这对于直接在物理主机上运行的mq服务器来说效果很好。