RabbitMQのルーティングパターンは、基本的にパブリッシュ/サブスクライブパターンと同じですが、違いはパブリッシュ/サブスクライブパターンはメッセージをすべてのバインドされたキューに転送するのに対し、ルーティングパターンはルーティングに一致するキューにメッセージを転送します。

具体的なコーディングの観点から見ると、ルーティングパターンとパブリッシュ/サブスクライブパターンの違いは、使用されるExchangeのタイプにあります。ルーティングパターンではDirectタイプのExchangeが使用されます。

アーキテクチャ図

Direct Pattern

説明:

  • Pはプロデューサを表し、C1とC2はコンシューマを表し、赤い箱はキューを表し、そしてXはエクスチェンジを表します。
  • エクスチェンジのタイプはダイレクトです。
  • ダイレクトエクスチェンジのメッセージ転送ロジック: メッセージ内のルーティングキーをこのエクスチェンジにバインドされた全てのキューと関連付けられたルーティングキーと比較します。一致する場合、そのメッセージは対応するバインディングのキューに送信されます。

例えば、上記の図では: キューQ1のルーティングキーはorangeであり、キューQ2のルーティングキーはblackとgreenです。メッセージを送信する際、もしメッセージのルーティングキーがorangeであれば、キューQ1に転送され、もしメッセージのルーティングキーがblackまたはgreenであれば、キューQ2に転送されます。

ユースケース

ルーティングパターンはパブリッシュ/サブスクライブパターンの拡張であるため、使用例はパブリッシュ/サブスクライブパターンと類似しており、違いはメッセージの購読条件を設定できる点です。

例えば: eコマースウェブサイトでは、中国東部、南部、北部、西南部の4つの倉庫があり、それぞれに倉庫管理システムが展開されています。ユーザが注文を行った後、最寄りの倉庫が出荷を担当します。

ユーザが注文を行った後、購入注文メッセージが生成されると、該当する地域の倉庫管理システムにメッセージを転送したいと考えています。これはルーティングパターンを使用することで実現できます。

4つの倉庫管理システムの配送キューのルーティングキーバインディングは以下の通りです:

  • 中国東部 = east
  • 北部中国 = north
  • 南部中国 = south
  • 西南部中国 = west

ユーザが注文を行った後、ユーザの住所がどの地域に属するかを判断し、ルーティングキーを計算してから注文メッセージを送信します。RabbitMQのダイレクトエクスチェンジはそれを対応するキューに転送します。