RabbitMQ コンシューマー スクリプトでは、RabbitMQ サーバーへの接続がいつ切断されたかを検出することが重要です。そうしないと、コンシューマはメッセージの受信に失敗したり、無限に実行を継続したりする可能性があります。
RabbitMQ コンシューマ スクリプトで使用される Streadway/amqp ライブラリは、接続を維持しようとするハートビート メカニズムを提供します。ただし、ハートビート間隔だけに依存するだけでは、切断された接続を確実に検出するには十分ではない可能性があります。
代わりに、より堅牢なアプローチとして、amqp.Connection オブジェクトの NotifyClose() メソッドを使用します。このメソッドは、トランスポートまたはプロトコル エラーが発生したときに通知するチャネルを返します。
import "github.com/rabbitmq/amqp091-go" func main() { conn, err := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ... }
メイン関数内で、接続が確立または再確立されるたびに、新しい通知チャネルを作成し、選択を開始する必要があります。エラー チャネルとメッセージ チャネルの両方を監視するステートメント。エラー チャネルでエラーを受信した場合は、接続が切断されたことを意味し、スクリプトは再接続を試行する必要があります。
この再接続ループの実装方法の例を次に示します。
for { conn, _ := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ch, _ := conn.Channel() msgs, _ := ch.Consume(...) for { select { case err := <-notify: // Handle connection error and reconnect case d := <-msgs: // Handle incoming message } } }
NotifyClose() を使用して接続のエラー チャネルを継続的に監視することで、コンシューマ スクリプトの応答性を維持し、接続の失敗を適切に処理することができます。こうすることで、スクリプトは必要に応じて RabbitMQ サーバーに自動的に再接続し、メッセージの欠落や途中で停止するリスクを軽減します。
以上がGo コンシューマはどのようにして、無効な RabbitMQ 接続を確実に検出して処理できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。