rabbitmq 鼠兔阻断连接和兔子MQ:连接已关闭

t3irkdon  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(219)

我在集群中有2个由Azure内部负载平衡器进行负载平衡的rabbitmq。客户端使用BlockingConnection连接到LB。
当客户端交换消息时,一切都正常。但当没有活动时,我的客户端似乎断开了连接,无法再接收消息。
我想知道是否有解决这个问题的方法?我假设负载平衡器或rabbitmq由于不活动而关闭了连接。我想让pika触发一些心跳到rabbitmq(以便负载平衡器保持连接打开),但没有找到任何好的解决方法。你能提供建议吗?

编辑1似乎pika BlockingConnections不支持心跳。Heart beat disables blocking connection

  • 谢谢-谢谢
hgtggwj0

hgtggwj01#

根据Pika文档http://pika.readthedocs.org/en/0.10.0/modules/parameters.html,似乎Pika BlockingConnentions与URLParameters指定的heart_interval(如amqps://www-data:rabbit_pwd@rabbit1/web_messages?heartbeat_interval=30)可以保持连接打开,但heart_interval的值不能大于rabbit服务器建议的值。


心跳超时值定义了RabbitMQ和客户端库认为对等TCP连接在多长时间后失效。此值在连接时由客户端和RabbitMQ服务器协商。客户端必须配置为请求心跳。在RabbitMQ 3.0和更高版本中,默认情况下,代理将尝试协商波动信号(尽管客户端仍然可以否决它们)。超时以秒为单位,默认值为60(版本3. 5. 5之前为580)。
心跳帧大约每超时/ 2秒发送一次。在丢失两次心跳后,对等方被视为不可访问。不同的客户端对此表示不同,但TCP连接将被关闭。当客户端检测到RabbitMQ节点由于心跳而不可访问时,它需要重新连接。
通过将超时间隔设置为0,可以禁用心跳。
来自Pika文档的示例代码:

import pika

parameters = pika.URLParameters('amqps://www-data:rabbit_pwd@rabbit1/web_messages?heartbeat_interval=30')
connection = pika.BlockingConnection(parameters)

相关问题