Při vytvoření přímé výměny se zpráva přesměruje do fronty, která je s ní svázána.
Ok Julio, ale pokud mám na této výměně 2 fronty?
Dobrá otázka, příteli! 😉
V tomto případě se uplatní směrovací klíč.
Směrovací klíč je atribut odpovědný za informování výměny, do které fronty má být zpráva směrována.
Poznámka: Výměna nasměruje přijatou zprávu pouze do front, které mají směrovací klíče naprosto stejné.
Poznámka 2: Pokud mají vázané fronty stejný směrovací klíč, je tato zpráva směrována do těchto front paralelně.
Fanout
Na rozdíl od typu Direct nemáme u fanoutu údaj o směrovacím klíči.
Pokud výměna Fanout přijme zprávu, je kopie této zprávy odeslána do všech front, které jsou na ni vázány.
Topic
Představte si, že typ Topic je typ Direct, ale s konkrétními vzory směrovacích klíčů.
V Topicu je možné použít vzory pro směrovací klíče.
Tyto vzory lze vytvořit pomocí znaků * a #.
Při vytváření vzoru směrovacího klíče pomocí # říkáme ústředně, že toto # může být nahrazeno 0 nebo n slovy.
Při použití * říkáme ústředně, že * může být nahrazeno pouze 1 slovem.
Pokud tedy ústředna typu Topic obdrží zprávu, zkontroluje směrovací klíč zprávy, porovná jej se směrovacími klíči front a odešle kopii této zprávy do všech front, ve kterých se směrovací klíče (zprávy a fronty) kombinují.
Příklad:
Směrovací klíč zprávy: routing.key.test
V uvedeném případě bude zpráva odeslána do 1., 3. a 4. fronty. Do fronty 2 odeslána nebude, protože vzor vyžaduje, aby za slovem „routing.“ bylo pouze jedno slovo a v našem případě jsou 2.
Headers
Před vysvětlením této výměny je nutné informovat, že je možné posílat atributy v hlavičce zprávy (podobně jako v hlavičce HTTP)
Výměna Headers je podobná výměně Topic, ale místo porovnávání Routing Key porovnává atributy přítomné v hlavičce zprávy s atributy přítomnými v argumentech definovaných při vazbě fronty ve výměně.
Pro toto ověřování je možné vytvořit pravidlo.
Pro vytvoření tohoto pravidla použijeme argument s klíčem „x-match“ se 2 možnými hodnotami: any a all.
Každá je srovnatelná s || podmínky a všechny jsou srovnatelné s &&.
Příklad:
Když pošleme zprávu s argumentem {„key1“: „value1“} v její hlavičce, bude tato zpráva směrována pouze do fronty „headers.queue1“, protože v ní je atribut {„key1“: „
V případě fronty „headers.queue2“ bude výměna ověřovat, zda hlavička zprávy obsahuje 2 argumenty, protože „x-match“ je nastaveno na all. Proto výměna nenajde {„key2“: „
Doufám, že vám toto stručné vysvětlení pomůže porozumět výměnám RabbitMQ.
Chcete-li se dozvědět více: https://www.rabbitmq.com/tutorials/amqp-concepts.html
Připojte se k naší komunitě Slack a čtěte naše týdenní témata o Faunu ⬇
.