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

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

我见过很多参考资料(例如这个问题),说道这个频道在没有连接的情况下就会死亡,剩下的未分类的消息将被重新发送。 这不是我看到的行为 - 相反,我获得了越来越多的标记为IDLE的频道列表,以及越来越多的标记为正在运行但没有活动的连接列表。

有一些配置需要注意,一旦进程被杀死,连接就会死亡?

编辑:我正在VirtualBox虚拟机内运行rabbitmq服务器,这显然不能通过NAT正确管理死入站连接。 这对于直接在物理主机上运行的mq服务器来说很好。


AMQP使用队列和交换。 你在交换机上发布并且绑定队列以从交换机获取消息(你可以在我的博客上看到一个简短的解释,当你创建一个队列时,你可以将它设置为自动删除,以及它在它之前会被闲置多少时间自动删除。以下是来自RabbitMQ quickref的报价:

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

支持:完整声明队列,如果需要创建。

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

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

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

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

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


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

我在VirtualBox虚拟机中运行rabbitmq服务器,显然,它不能通过NAT正确管理入站连接。 这对于直接在物理主机上运行的mq服务器来说很好。

链接地址: http://www.djcxy.com/p/5827.html

上一篇: when does an AMQP/RabbitMQ channel with no connections die?

下一篇: Microservices: What are smart endpoints and dumb pipes?