我有一个简单的 RabbitMQ 测试程序,随机将消息排队,另一个读取它们,所有这些都使用 Spring-AMQP。如果消费者死亡(例如,在没有机会关闭其连接或通道的情况下终止进程),则它尚未确认的任何消息似乎将永远保持未确认状态。
我看过很多参考资料(例如这个问题 https://stackoverflow.com/questions/7063224)表示通道在没有连接时就会终止,并且剩余的未确认消息将被重新传递。这不是我看到的行为 - 相反,我得到了越来越多的标记为空闲的通道列表和越来越多的标记为正在运行但没有活动的连接列表。
是否需要进行一些配置才能注意到进程被终止后连接就消失了?
EDIT:我在 VirtualBox VM 中运行rabbitmq 服务器,它显然无法通过 NAT 正确管理无效的入站连接。这对于直接在物理主机上运行的 mq 服务器来说效果很好。
AMQP 使用队列和交换器。您在交换器上发布并绑定队列以从交换器获取消息(您可以看到简短的解释 http://arnon.me/2011/08/amqp/在我的博客上。创建队列时,您可以将其设置为自动删除,以及在自动删除之前将其保持未使用状态的时间。
以下是 RabbitMQ 快速参考中的引用:
队列.declare(短保留-1,队列名称队列,位被动,位
耐用,有点独特,位自动删除,无需等待,无需等待,表
参数)➔ 声明-ok
支持:完整的声明队列,如果需要则创建。
此方法创建或检查队列。创建新队列时
客户端可以指定控制持久性的各种属性
队列及其内容,以及队列的共享级别。
RabbitMQ 实现了 AMQP 规范的扩展,允许
队列的创建者来控制其行为的各个方面。
每个队列消息 TTL 此扩展确定消息的持续时间
发布到队列的数据在被服务器丢弃之前可以存活。
生存时间通过 x-message-ttl 参数配置
该方法的arguments参数。
队列到期可以使用可选的租用时间来声明队列。这
租约时间决定队列在被使用之前可以保持未使用状态的时间长度
被服务器自动删除。租赁时间以
x-使该方法的arguments 参数中的参数过期。
镜像队列我们开发了主动/主动高可用性
队列。这是通过允许队列镜像到其他节点来实现的
在 RabbitMQ 集群内。结果是 a 的一个节点应该
集群失败,队列可以自动切换到其中一个镜像
并继续运营,不会出现服务不可用的情况。创造
镜像队列,您在参数中提供 x-ha-policy 参数
该方法的参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)