私はpika.SelectConnectionを使ってRabbitMqサーバと通信するいくつかのスクリプトを持っています。Rabbitmq pika自動再接続
スクリプトが動作しているときに、サーバがダウンした場合に、それらのスクリプトが自動的にrmqサーバに再接続しようとしていますか?
私はpika.SelectConnectionを使ってRabbitMqサーバと通信するいくつかのスクリプトを持っています。Rabbitmq pika自動再接続
スクリプトが動作しているときに、サーバがダウンした場合に、それらのスクリプトが自動的にrmqサーバに再接続しようとしていますか?
は私が再接続に次のアプローチを使用するスクリプトをたくさん持っている:それはナキウサギを使用していないが、昆布、それにもかかわらず、原則を適用することができ
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ブローカの再起動にはうまくいきました。スクリプトを再接続することができたのですが、殺して再起動する方が簡単でした。