RabbitMQのルーティングパターンは、基本的にパブリッシュ/サブスクライブパターンと同じですが、違いはパブリッシュ/サブスクライブパターンはメッセージをすべてのバインドされたキューに転送するのに対し、ルーティングパターンはルーティングに一致するキューにメッセージを転送します。
具体的なコーディングの観点から見ると、ルーティングパターンとパブリッシュ/サブスクライブパターンの違いは、使用されるExchangeのタイプにあります。ルーティングパターンではDirectタイプのExchangeが使用されます。
アーキテクチャ図
説明:
- Pはプロデューサを表し、C1とC2はコンシューマを表し、赤い箱はキューを表し、そしてXはエクスチェンジを表します。
- エクスチェンジのタイプはダイレクトです。
- ダイレクトエクスチェンジのメッセージ転送ロジック: メッセージ内のルーティングキーをこのエクスチェンジにバインドされた全てのキューと関連付けられたルーティングキーと比較します。一致する場合、そのメッセージは対応するバインディングのキューに送信されます。
例えば、上記の図では: キューQ1のルーティングキーはorangeであり、キューQ2のルーティングキーはblackとgreenです。メッセージを送信する際、もしメッセージのルーティングキーがorangeであれば、キューQ1に転送され、もしメッセージのルーティングキーがblackまたはgreenであれば、キューQ2に転送されます。
ユースケース
ルーティングパターンはパブリッシュ/サブスクライブパターンの拡張であるため、使用例はパブリッシュ/サブスクライブパターンと類似しており、違いはメッセージの購読条件を設定できる点です。
例えば: eコマースウェブサイトでは、中国東部、南部、北部、西南部の4つの倉庫があり、それぞれに倉庫管理システムが展開されています。ユーザが注文を行った後、最寄りの倉庫が出荷を担当します。
ユーザが注文を行った後、購入注文メッセージが生成されると、該当する地域の倉庫管理システムにメッセージを転送したいと考えています。これはルーティングパターンを使用することで実現できます。
4つの倉庫管理システムの配送キューのルーティングキーバインディングは以下の通りです:
- 中国東部 = east
- 北部中国 = north
- 南部中国 = south
- 西南部中国 = west
ユーザが注文を行った後、ユーザの住所がどの地域に属するかを判断し、ルーティングキーを計算してから注文メッセージを送信します。RabbitMQのダイレクトエクスチェンジはそれを対応するキューに転送します。