Rabbitmq pika自动重新连接

时间:2012-01-16 15:05:45

标签: python rabbitmq amqp pika

我有一些脚本,使用pika.SelectConnection与RabbitMq服务器通信。

有没有让这些脚本尝试自动重新连接到rmq服务器,以防服务器出现故障,而脚本工作?

1 个答案:

答案 0 :(得分:1)

我有很多脚本使用以下方法重新连接:

 while True:
     try:
         mqExch.channel.connection.drain_events(timeout=25)
     except socket.timeout:
         hb.beat() # let our supervisor know we are not hung

它不是使用鼠兔,而是使用Kombu,但原则可以应用。 drain_events方法是消息消费的核心,即它永远循环接收消息并运行回调来处理消息。正如你在这里看到的那样,我每25秒就有一个低级套接字库超时。对于一些库,我必须修补几行代码才能使这种行为正常工作而不会在模块内部崩溃。

在任何情况下,hb.beat发送的心跳都由管理程序进程监视,如果在太短的时间跨度内出现太多故障,此进程将终止该脚本。杀死脚本后,主管重新启动它。这在处理间歇性网络错误或MQ代理重启方面效果很好。虽然我可以让我的脚本重新连接,但杀死并重启更简单。