首页 文章

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

提问于
浏览
9

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

我已经看到一些引用(例如this question)表示通道在没有连接时死亡,并且剩下的不是我看到的行为 - 而是我得到了一个越来越多的标记为IDLE和不断增长的列表的通道连接标记为运行但没有活动 .

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

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

2 回答

  • 3

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

    queue.declare(短保留-1,队列名队列,位被动,持久位,位独占,位自动删除,无等待无等待,表参数)➔decere-ok支持:完全声明队列,创建如果需要的话 . 此方法创建或检查队列 . 创建新队列时,客户端可以指定控制队列及其内容持久性的各种属性,以及队列的共享级别 . RabbitMQ实现了对AMQP规范的扩展,允许队列的创建者控制其行为的各个方面 . 每队列消息TTL此扩展确定发布到队列的消息在被服务器丢弃之前可以存活多长时间 . 使用此方法的arguments参数的x-message-ttl参数配置生存时间 . 可以使用可选的租约时间声明队列到期队列 . 租约时间决定了队列在被服务器自动删除之前可以保持未使用的时间 . 租约时间在此方法的arguments参数中作为x-expires参数提供 . 镜像队列我们为队列开发了主动/主动高可用性 . 这可以通过允许队列在RabbitMQ集群中的其他节点上进行镜像来实现 . 结果是,如果群集中的一个节点发生故障,则队列可以自动切换到其中一个镜像并继续运行,而不会出现服务不可用的情况 . 要创建镜像队列,请在此方法的arguments参数中提供x-ha-policy参数 .

  • 4

    接近关闭 . 事实证明这不是一个真正的问题 .

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

相关问题