これまで示してきた説明のまとめとして、ここでは、Message Queue サービスで、どのようにメッセージがプロデューサからコンシューマへ配信されているかついて説明します。全体像を理解するため、さらに説明する必要があります。配信の過程でシステムが処理するメッセージは、次の 2 つのカテゴリに分類されます。
コントロールメッセージ。これは、ブローカとクライアントランタイム間で送られるプライベートメッセージであり、ペイロードメッセージの正常な配信と、コネクション全体のメッセージのフロー制御が確実に行われるようにします。
図 2–7 に、メッセージ配信を示します。
信頼性の高い方法で、持続的に配信されるメッセージのメッセージ配信手順は次のとおりです。
1. クライアントランタイムが、コネクションを使用して、メッセージプロデューサからブローカにメッセージを配信します。
2. ブローカが、コネクションからメッセージを読み込み、適切な送信先に保管します。
3. ブローカが (持続) メッセージをデータストアに保管します。
4. ブローカが、メッセージを受信したことについて、メッセージプロデューサのクライアントランタイムに通知します。
5. ブローカが、メッセージのルーティングを決定します。
6. ブローカは、コンシューマの一意の識別子をメッセージに付けて、メッセージをその送信先から適切なコネクションへ書き出します。
7. メッセージコンシューマのクライアントランタイムが、コネクションからメッセージコンシューマにメッセージを配信します。
8. メッセージコンシューマのクライアントランタイムが、メッセージをコンシュームしたことについて、ブローカに通知します。
9. ブローカはクライアント通知を処理し、すべての通知を受信したときに、(持続) メッセージを削除します。
10. ブローカは、コンシューマのクライアントランタイムに対して、クライアント通知が処理されたかどうかを確認します。
管理者がメッセージを送信先から削除した場合、または管理者が永続サブスクリプションを削除または再定義し、その結果、トピック送信先内のメッセージが配信されずに削除された場合、ブローカはメッセージがコンシュームされる前にメッセージを破棄できます。その他の状況では、ブローカにメッセージを破棄させるのではなく、デッドメッセージキューと呼ばれる特殊な送信先に保存させることができます。メッセージの有効期限が切れたとき、メモリーの制限のために削除されたとき、またはクライアントが例外をスローしたために配信が失敗したとき、メッセージはデッドメッセージキューに保管されます。メッセージをデッドメッセージキューに保存しておくと、システムの問題を解決し、特定の状況でメッセージを復元することができます。