Pika BlockingConnection和RabbitMQ:连接已关闭

问题描述 投票:1回答:1

我有2个rabbitmq在群集负载平衡Azure内部负载均衡器。客户端使用BlockingConnection连接到LB.

当客户交换消息时,一切正常。但是当没有活动时,我的客户似乎已断开连接,并且无法再接收消息。

我想知道这个问题是否有解决方案?我假设负载均衡器或rabbitmq由于不活动而关闭连接。我想让pika触发一些heartbeat到rabbitmq(以便负载平衡器保持连接打开)但是没有找到任何好的解决方案。你能建议吗?

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

谢谢。

python azure rabbitmq pika
1个回答
0
投票

根据Pika doc 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服务器建议的值。

Heartbeat Timeout Interval

心跳超时值定义在RabbitMQ和客户端库应该将对等TCP连接视为死亡的时间段之后。此值在连接时在客户端和RabbitMQ服务器之间协商。必须将客户端配置为请求心跳。在RabbitMQ 3.0及更高版本中,代理将默认尝试协商心跳(尽管客户端仍然可以否决它们)。超时以秒为单位,默认值为60(版本3.5.5之前为580)。

每次超时/ 2秒发送心跳帧。在两次错过心跳之后,该对等体被认为是无法访问的。不同的客户端以不同的方式显示,但TCP连接将被关闭。当客户端检测到由于心跳而无法访问RabbitMQ节点时,需要重新连接。

可以通过将超时间隔设置为0来禁用心跳。

Pika doc的示例代码:

import pika

parameters = pika.URLParameters('amqps://www-data:rabbit_pwd@rabbit1/web_messages?heartbeat_interval=30')
connection = pika.BlockingConnection(parameters)
© www.soinside.com 2019 - 2024. All rights reserved.