web-dev-qa-db-ja.com

rabbitmqでルーティングキーが必要な理由

なぜ必要なのかrouting keyは、メッセージをexchangeからキューにルーティングします。単にキュー名を使用してメッセージをルーティングすることはできません。また、複数のキューにパブリッシュする場合、複数のキュー名を使用できます。ルーティングキーが実際に必要になるシナリオを誰かが指摘できますか?キュー名は十分ではありません。

19
Naresh

交換にはいくつかのタイプがあります。 fanout交換はルーティングキーを無視し、すべてのキューにメッセージを送信します。ただし、他のほとんどすべての交換タイプは、ルーティングキーを使用して、メッセージを受信するキュー(ある場合)を決定します。

RabbitMQ Webサイトのチュートリアル は、さまざまな交換タイプが役立ち、ルーティングキーが関連するいくつかのユースケースを説明しています。

たとえば、 チュートリアル5 は、topic交換を使用して、各メッセージのログレベルに応じてログメッセージを異なるキューにルーティングする方法を示しています。

複数のキューをターゲットにする場合は、それらをfanoutエクスチェンジにバインドし、パブリッシャーでそのエクスチェンジを使用する必要があります。

パブリッシャーで複数のキュー名を指定することはできません。 AMQPでは、メッセージをキューに公開するのではなく、メッセージをエクスチェンジに公開します。関連するキューを決定するのは交換の責任です。メッセージがまったくキューにルーティングされず、単にドロップされる可能性があります。

キュー名をアプリケーションから分離すると、柔軟性が向上します。

  • 複数のキューを確立して同じメッセージを消費することもできますが、キューに同じ名前を付けることはできません。

  • 場合によっては、メッセージの発信者はキューの名前を知りません。 (サーバーを水平方向にスケーリングするときにランダムに生成されたキュー名がある場合など)

  • エクスチェンジは、1種類以上のコンシューマにメッセージをルーティングする場合があります。次に、メッセージを関係するコンシューマーにルーティングするために、ルーティングキーにいくつかのワイルドカードが必要になります。

3
nurettin