【问题标题】:RabbitMQ: Server heartbeat must fail 3 times before connection drop?RabbitMQ:服务器心跳必须在连接断开之前失败3次?
【发布时间】:2014-04-12 01:56:25
【问题描述】:

我们有一个 HA RabbitMQ 集群 (v3.2.x),它有两个节点,位于负载均衡器后面。我们的客户端配置为使用 300 秒的心跳。大多数情况下,一切都按预期工作。

但是,如果客户端的连接断开(例如客户端的 NIC 断开连接),我们注意到(通过 TCPDump/wireshark)RabbitMQ 节点将在关闭连接之前尝试 3 次心跳消息(在我们的例子中将近 15 分钟) .为什么?一次失败为什么不关闭呢?

有什么方法可以改变 RabbitMQ 服务器上的这种行为吗?或者我们是否必须将我们的心跳缩短到更小的时间,比如 5 秒或 10 秒,以便让连接更快地关闭?

相关问题...

查看 TCPDump(在负载平衡器上捕获),我想知道为什么 LB 在没有收到来自死客户端的 TCP-ACK 以响应代理的 RabbitMQ 服务器心跳请求时不关闭连接?事实上,LB 会尝试多次发送请求(当然,永远不会收到响应)。 LB 假设连接已被删除并关闭整个会话(包括与 RabbitMQ 节点的连接)是否有意义?

【问题讨论】:

    标签: rabbitmq load-balancing wireshark tcpdump heartbeat


    【解决方案1】:

    似乎 RabbitMQ 被配置为在终止连接之前容忍两次丢失的心跳。但是,它会等到需要发送下一个心跳才会断开连接,这就是它看起来需要 3 次丢失心跳的原因。

    Heartbeat1(无响应)等待 Heartbeat2(无响应)等待 Heartbeat3 终止

    MQ 中有一个小错误(它会发送第三次心跳但立即终止连接),但它并没有真正影响任何事情。

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多