首页 文章

RabbitMQ:服务器心跳必须在连接断开前失败3次?

提问于
浏览
0

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

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

有没有办法在RabbitMQ服务器上更改此行为?或者我们是否必须将心跳缩短到像5s或10s那样小得多的东西,以便更快地关闭连接,想法?

Related issue...

看一下TCPDump(在负载均衡器上捕获),我想知道为什么LB在没有从死客户端收到TCP-ACK以响应代理的RabbitMQ服务器心跳请求时没有关闭连接?实际上,LB会尝试多次发送请求(当然从未收到响应) . LB是否有必要假设连接已被删除并关闭整个会话(包括与RabbitMQ节点的连接)?

1 回答

  • 0

    似乎RabbitMQ被配置为在终止连接之前容忍两个错过的心跳 . 但是,它等待下一次心跳需要在它断开连接之前发送,这就是它需要3次错过心跳的外观 .

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

    MQ中有一个小错误(它发送第三个心跳但立即终止连接)但它并没有真正影响任何东西 .

相关问题