Pika BlockingConnection& RabbitMQ:连接已关闭

时间:2016-01-11 12:06:24

标签: python azure rabbitmq pika

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

根据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的值不能大于兔子服务器建议的值。

  

<强> 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)