2012-01-16 20 views
1

私はpika.SelectConnectionを使ってRabbitMqサーバと通信するいくつかのスクリプトを持っています。Rabbitmq pika自動再接続

スクリプトが動作しているときに、サーバがダウンした場合に、それらのスクリプトが自動的にrmqサーバに再接続しようとしていますか?

答えて

1

は私が再接続に次のアプローチを使用するスクリプトをたくさん持っている:それはナキウサギを使用していないが、昆布、それにもかかわらず、原則を適用することができ

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

drain_eventsメソッドは、メッセージを消費することのコアです。つまり、メッセージを永久にループしてメッセージを処理するコールバックを実行します。ここからわかるように、低レベルソケットライブラリは25秒ごとにタイムアウトします。いくつかのライブラリでは、モジュール内でクラッシュすることなくこの動作を動作させるために、2行のコードを修正する必要がありました。

いずれの場合も、hb.beatによって送信されたハートビートはスーパーバイザプロセスによって監視され、短すぎる時間間隔で失敗が多すぎる場合、このプロセスによってスクリプトが強制終了されます。スクリプトを終了すると、スーパーバイザはスクリプトを再起動します。断続的なネットワークエラーやMQブローカの再起動にはうまくいきました。スクリプトを再接続することができたのですが、殺して再起動する方が簡単でした。

関連する問題