【问题标题】:Why there is a duplicated consumer after a connection recovery in RabbitMQ?为什么在 RabbitMQ 中连接恢复后会有重复的消费者?
【发布时间】:2023-11-13 18:06:01
【问题描述】:

我正在使用:

  • RabbitMQ 3.5.1
  • Java RabbitMQ 客户端
  • 具有两个 RabbitMQ 实例的集群

我有一个队列:

  • 耐用=假
  • 独占=假
  • 自动删除=true
  • 队列镜像不影响结果

在我的应用程序中,有一个异步消费者通过回调接收消息。 当我尝试通过禁用与​​代理的网络通信来模拟连接失败时,就会出现问题。重新建立连接后,队列(在 Web 管理界面中)显示两个消费者使用相同的消费者标签连接,但端口号不同。

当我停止应用程序时,其中一个消费者消失了,但另一个仍然连接,因此队列没有被删除。这是意料之中的还是我必须改变一些东西来避免这种情况?

【问题讨论】:

标签: java rabbitmq amqp


【解决方案1】:

有两个连接,因为默认心跳是 580 秒,所以服务器检测到它需要那个时间。

当该值设置为较低值时,第一个连接立即关闭。 Detecting Dead TCP Connections with Heartbeats中有关心跳选项的更多详细信息

感谢 Gas 提供使用 RabbitMQ 用户组论坛的提示。

【讨论】: