直接交換を作成する場合、それにバインドされているキューにメッセージを誘導します。
Ok Julio, but if I have 2 queues on this exchange?
良い質問だ!;)
この場合、ルーティングキーが有効になります。
ルーティングキーは、メッセージが指示されるべきキューを交換に通知するための属性です。
注意:交換は、全く同じルーティングキーを持つキューにのみ受信メッセージを向けます。
注意2:結合されたキューが同じルーティングキーを持つ場合、このメッセージは並行してそれらのキューへ向けられます。
Fanout
Direct型と異なり、FanoutではRouting Keyの数値はありません。
Fanout交換がメッセージを受信すると、このメッセージのコピーはそれにバインドされているすべてのキューに送信されます。
Topic
TopicタイプはDirectタイプですが、特にRouting Keys Patternsを想像してください。
Topicでは、ルーティングキーにパターンを使用できます。
ルーティング キー パターンを#で作成する場合、この#は0またはn個の単語で置き換えられることを交換機に伝えています。
*を使用する場合、*は1個の単語で置き換えられることだけを交換機に伝えています。
したがって、TopicタイプのExchangeがメッセージを受信すると、メッセージのRouting Keyをチェックし、キューのRouting Keyと比較し、Routing Key(メッセージとキュー)が結合するすべてのキューにそのメッセージのコピーを送ります。
例:
Message Routing Key: routing.key.test
上のケースでは、メッセージはキュー1、3、4へ送られることになります。 このパターンでは、”routing. “の後に単語が1つしかないことが必要で、このケースでは2つあるため、2には送られません。
Headers
この交換を説明する前に、メッセージのヘッダで属性を送ることが可能であることを知らせる必要があります(HTTPのヘッダに似ています)
Headers exchangeはTopicと似ていますが、Routing Keyを比較するのではなく、メッセージヘッダに存在する属性と交換でキューを結合したときに定義した引数に含まれる属性と比較するのです。
この検証のためのルールを作成することが可能です。
このルールを作成するには、any と all という 2 つの可能な値を持つ “x-match” キーを持つ引数を使用します。
anyは条件の||に相当し、allは&&に相当します。
例:
あるメッセージで{“キー1”: “value1”}という属性があるため、このメッセージは “headers.queue1” というキューにのみ振り分けられます。 「
“headers.queue2 “キューの場合、”x-match “がallに設定されているので、Exchangeはメッセージヘッダに2つの引数が含まれているかどうか検証します。 そのため、Exchangeは{“key2”: 「
この簡単な説明が、RabbitMQ Exchangesを理解するのに役立つことを願っています。 https://www.rabbitmq.com/tutorials/amqp-concepts.html
Join our community Slack and read our weekly Faun topics ⬇