RabbitMQのトピックモードは、ルーティングモードに似ていますが、その違いはトピックモードのルーティングマッチングがワイルドカードの曖昧なマッチングをサポートしている点です。一方、ルーティングモードは完全一致のみをサポートしています。
アーキテクチャ図
説明:
- Pはプロデューサを、Xはエクスチェンジを表し、赤いQ1、Q2はキューを、C1、C2はコンシューマを表します。
- エクスチェンジのタイプはトピックです。
- トピックエクスチェンジのメッセージ転送ロジック:メッセージ内のルーティングキーを、エクスチェンジのすべてのバインディングに関連付けられたルーティングキーとのワイルドカードの曖昧なマッチングを行い、一致する場合はメッセージをバインドされたキューに送信します。
ヒント:トピックモードとダイレクトモードの違いは、ルーティングキーの一致がワイルドカードの曖昧なマッチングをサポートしているかどうかです。それ以外は同じです。
トピックがサポートするワイルドカードは次のとおりです:
-
#
(ハッシュ)は1つ以上の単語に一致します -
*
(アスタリスク)は1つの単語にのみ一致します
例:
キューQ1にバインドされたルーティングキー = *.orange.*
キューQ2にバインドされたルーティングキー = *.*.rabbit
および lazy.#
メッセージのルーティングキーが "quick.orange.rabbit" の場合、Q1とQ2の両方に一致します。
ヒント:ルーティングキーがどのキューにも一致しない場合、メッセージは破棄されます。ルーティングキーが空の場合、ファンアウトモードと同じ機能を持ち、メッセージはすべてのキューに直接転送されます。
ユースケース
ルーティングモードと同様に、柔軟な購読条件の柔軟性に違いがあり、特にルーティングキーのより柔軟な一致ルールが異なります。