【发布时间】:2012-01-16 15:05:44
【问题描述】:
我有一些脚本,使用 pika.SelectConnection 与 RabbitMq 服务器通信。
有没有办法让那些脚本尝试自动重新连接到 rmq 服务器,以防服务器宕机而脚本工作?
【问题讨论】:
我有一些脚本,使用 pika.SelectConnection 与 RabbitMq 服务器通信。
有没有办法让那些脚本尝试自动重新连接到 rmq 服务器,以防服务器宕机而脚本工作?
【问题讨论】:
我有很多使用以下方法重新连接的脚本:
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 代理重新启动时效果很好。虽然我可以让我的脚本重新连接,但杀死并重新启动更简单。
【讨论】: