RabbitMQ でサポートされるメッセージ モード:
依存関係のインポート:
<依存関係>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
</依存>
ツールのパッケージ:
第1タイプ:ベーシックモデル(直結)
P: プロデューサー、メッセージを送信するプログラム
C: コンシューマー、メッセージの受信者、メッセージの到着を待っている、メッセージを消費する
キュー (赤い部分): メッセージ キュー。メールボックスと同様に、メッセージをキャッシュし、プロデューサーがメッセージを配信し、コンシューマーがメッセージを取得できます。
開発プロデューサー:
開発者の消費者:
結果 (プロデューサー):
印刷(消費者):
2つ目:ワークキューモデル(ワークキュー)
ワーク キュー: タスク モデル。メッセージの処理に時間がかかる場合、メッセージの生成速度が消費の速度よりもはるかに速くなり、メッセージが蓄積される可能性があります。複数のコンシューマーを使用してキューにバインドし、一緒に消費することができます。
P: プロデューサー、メッセージを送信するプログラム
C1: コンシューマー、メッセージの受信者、メッセージの到着を待っている、メッセージを消費する
C2: コンシューマー、メッセージの受信者、メッセージの到着を待っている、メッセージを消費する
プロデューサー:
コンシューマ 1:
コンシューマ 2:
結果 (プロデューサー):
印刷 (消費者 1)
デフォルトでは、rabbitMQ は各メッセージをコンシューマーに順番に送信し、各コンシューマーは平均して同じ数のメッセージを受信します. このメッセージ配布方法は循環的です.
メッセージ自動確認の仕組み:
メッセージの自動確認メカニズムが有効になっている場合、コンシューマはキューからすべてのメッセージを取得します。ただし、何らかの問題によりメッセージの処理中にコンシューマーが突然クラッシュした場合、メッセージが失われる可能性があります。メッセージ処理の過程で、コンシューマーがダウンした場合、未完成のメッセージを他のコンシューマーに引き渡して、メッセージの損失を回避できることが望まれます。
メッセージの損失を避けるために、RabbitMQ はメッセージの確認をサポートしています。コンシューマーは、特定のメッセージが受信、処理され、RabbitMQ が自由に削除できることを RabbitMQ に通知するために確認応答を返します。
コンシューマーが何らかの理由 (チャネルが閉じられた、接続が閉じられた、TCP 接続が失われた) で ack を送信せずにクラッシュした場合、RabbitMQ はメッセージが完全に処理されていないことを認識し、再度キューに入れます。他の消費者が同時にオンラインである場合、他の消費者にすぐに再配布されます。
より多くの作業を行える人: メッセージ処理能力の高いコンシューマーはより多くのタスクを処理し、処理能力の低いコンシューマーはより少ないタスクを分配します
達成:
1. メッセージの自動確認をオフにする
2. 同じコンシューマーに同時に 1 つのメッセージのみを送信するようにサーバーを設定する
3. メッセージの手動確認をオンにする
3 番目のタイプ: パブリッシュ/サブスクライブ モデルのファンアウト (パブリッシュ/サブスクライブ モデル)
ファンアウト: ブロードキャスト モード;
メッセージ送信プロセス:
複数のコンシューマーを持つことができます
各コンシューマーには独自のキューがあります
各キューは交換にバインドする必要があります
プロデューサーは取引所にのみメッセージを送信できます
スイッチは与えるキューを決定しますが、プロデューサーは決定できません
交換はメッセージをすべてのバインドされたキューに送信します
キュー内のすべてのコンシューマーがメッセージを取得できます (1 つのメッセージが複数のコンシューマーによって消費される可能性があることに注意してください)。
プロデューサー:
消費者:
RabbitMQ メッセージ モデルのコア アイデア (コア アイデア): プロデューサーは、RabbitMQ の交換センター (Exchange) にメッセージを送信します. Exchange の片側はプロデューサーであり、反対側は 1 つ以上のキューです. Exchange は、特定のキューに送信されるか、直接破棄されるメッセージのライフ サイクルを決定します。
4 番目のタイプ: パブリッシュ/サブスクライブ モデルのルーティング (ルーティング モード)
ルーティング: パブリッシュ/サブスクライブ モデル - 直接接続。
必須:
キューはスイッチにバインドされています。任意にバインドすることはできませんが、ルーティング キーを指定する必要があります
プロデューサーがメッセージを交換に送信するとき、メッセージのルーティング キーを指定する必要があります。
P: プロデューサーは、スイッチに送信するときにルーティング キーを指定します。
X: プロデューサー メッセージを受信し、ルーティング キーに一致するキューにメッセージを配信します。
C1: ルーティングが必要なキーが error であるメッセージをキューが指定しているコンシューマ
C2: キーが info であるメッセージを指定するキューを持つコンシューマをルーティングする必要があります
プロデューサー:
消費者:
5 番目のタイプ: パブリッシュ/サブスクライブ モデルのトピック (トピック モード)
トピック (トピック モード): トピック タイプ スイッチを使用すると、キーのルーティング時にキュー バインドでワイルドカードを使用できます。
ワイルドカード:
*: 1 つの単語のみに一致
#: ゼロ、1 つまたは複数の単語に一致
プロデューサー:
消費者: