この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 26359|答える: 2

RabbitMQメッセージ応答のメカニズムの詳細な分析

[リンクをコピー]
掲載地 2018/03/30 10:42:59 | | | |


消費者がメッセージを受け取り処理タスクが完了すると、このメッセージ識別子付きのackを送信し、メッセージが受信され処理が完了したことをサーバーに伝えます。 RabbitMQは、メッセージを処理する消費者のリンクが失われるまでメッセージが正しく処理されていないと判断し、メッセージを再送信します。
メッセージの確認はデフォルトでオフになっています。 Consumerを初期化する際にnoAckパラメータがあります。trueに設定すると、コンシューマーはメッセージを受け取った直後にACKを返します


一般的に、一般的に使われるシナリオのノックはtrueに設定されますが、支払いのような高リスク要件のプロジェクトでは適用されます。 すべてのメッセージに対して、その完全性と正確性を確保する必要があります。 メッセージを受け取った後、正しいビジネスロジックが実行されていることを確認し、その後、サーバーに積極的にアドレスを返す必要があります。 キュー内のメッセージは、rabbitmqctl list_queues message_rady message_unacknowleded コマンド、またはバックグラウンド管理インターフェースを通じて閲覧できます。

noAckがfalseに設定されている場合、クライアントは積極的にサーバーにackを送信し、クライアントがメッセージを確認しない場合は以下の状況が発生します。



プログラムがまだ実行されている限り、これら10のメッセージはアクを残さず、RabbitMQによって再配信されることはありません。 さらに強力なのは、RabbitMQのメッセージ消費にはタイムアウト機構はありませんつまり、プログラムが再起動されなければ、メッセージは常にアンアック状態のままです。 オペレーションイベント作業中にこれらのアンロック状態メッセージを忘れないでください。

準備

このステータスのメッセージは処理されるキューに存在します。

未確認

このステータスのメッセージは、すでに処理中であることを示しますが、応答がありません。




プログラムが閉じられると(コンシューマーが閉じられている限り)、これら10のメッセージは準備完了状態に戻ります。


確認メッセージ

クライアントがサーバーにACKを送信したらどうなりますか? つまり、メッセージの受信を確認したいということですか? コードは以下の通りです:


BasicAckメソッドの2つ目のパラメータであるmultipleがfalseに設定されている場合、RabbitMQは現在のメッセージが確認されたことを通知されます。もし真であれば、最初のパラメータで指定された配信タグより小さい追加のメッセージが確認されます。 (一括確認はチャンネル全体に向けられています)

確認をキャンセルする

分散プログラムのクライアントの一つに例外があり、メッセージの確認をキャンセルして他のクライアントにメッセージ処理させたいとしたらどうしますか?

消費メッセージに例外がある場合は確認をキャンセルし、その後ChannelのbasicRejectメソッドを使えます。

最初のパラメータは配信タグを指定し、2つ目のパラメータはこの失敗メッセージの処理方法を記述します。trueの値はメッセージがキューヘッダーに戻されることを意味し、falseの値はメッセージが放棄されたことを意味します




先の:自分でDNSサーバーの設定方法を教えてあげます!
次に:百度地図で都市座標を入手できます
掲載地 2021/09/22 20:49:04 |
学ぶことを...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com