4

RabbitMQ 経由で送信したい 2 種類のメッセージがあります。したがって、これを行う方法は2つあります。

  • routing_keyキュー名に対応するデフォルトの空の名前の交換にメッセージを送信しました
  • キューバインディングでコンシューマーのパラメーターに対応するdirect取引所のパラメーターを使用するrouting_keyrouting_key

では、どのオプションが望ましいのでしょうか?またその理由は?

4

4 に答える 4

6

デフォルトの交換直接交換です。RabbitMQ はデフォルトでデフォルト交換を作成しますが、名前には空の文字列を使用します。RabbitMQ AMQP の概念ページを見ると、[デフォルトの交換] の下に次のように表示されます。

デフォルトの交換は、ブローカーによって事前に宣言された名前 (空の文字列) のない直接交換です。

これは、次のコマンドを実行rabbitmqctl list_exchangesしても確認できます。

                direct
Foo             direct    < Same thing as the above
amq.direct      direct
amq.fanout      fanout
...and so on

私の知る限り、一方を他方よりも使用するメリットはありません。ルーティング キーに基づいてルーティングするだけでよい場合は、デフォルトの交換を使用します。

于 2013-12-11T19:15:38.977 に答える
2

「info」、「warn」、および「error」のルーティングキーにログをブロードキャストする交換に直接バインドするとします。デフォルトの交換を使用して、すべてのログを受信するには、これらの名前で 3 つの異なるキューを作成する必要があります。また、受信するログ レベルを調整するには、キュー宣言を変更する必要があります。名前付き交換を使用することで、キューのバインディングを変更するだけで、通常どおり処理を続行できます。

つまり、1 つの追加レベルの抽象化を提供します。

于 2014-12-15T17:40:19.880 に答える
0

私が見たように、デフォルトの直接交換は、キューの名前を暗黙的に使用してキュー (コンシューマーによって使用される) をエクスチェンジ (プロデューサーによって使用される) にバインドすることにより、コンシューマーとプロデューサーがお互いを知らない可能性を与えます。

特定のケースでは、デフォルトの直接交換を使用します。消費者と生産者はお互いを知りません。私の場合、各消費者には適切なキューがあります。プロデューサからは、コンシューマに依存するため、どのキューが宣言されて使用されるかを事前に知ることはできません。そのため、カスタムの直接交換とプロデューサー側のキューの間のバインディングを定義することは不可能です。カスタム (ユーザー定義) の直接交換で解決する 1 つの方法は、消費者側でバインディング キーを定義することです。ただし、プロデューサーが使用する交換名を知る必要があるため、コンシューマー側からプロデューサーについて知る必要があります。

したがって、デフォルトの直接交換でキューをその名前で自動的にバインドすると、私の場合、コンシューマー側でのみキューを宣言し、キューの名前を知っているだけでプロデューサーからキューにメッセージを送信できます。

もちろん、カスタム直接交換のバインディングキーを知る必要があるため、プロデューサーを呼び出すときに実行時にキューの名前を知ることを意味します(私の場合、キューの名前はプロデューサーを使用するアプリケーションによって与えられます) )。ただし、ブローカーを構成するとき、プロデューサーとコンシューマーはお互いを知る必要はありません。

于 2015-08-08T19:56:12.447 に答える