Co je to výměna? Co jsou směrovací klíče a vazby? Jak jsou výměny a fronty vzájemně propojeny? Kdy a jak je použít? Tento článek vysvětluje různé typy výměn v RabbitMQ a scénáře jejich použití.
Zprávy nejsou publikovány přímo do fronty. Místo toho odesílá producent zprávy do výměny. Výměny jsou agenti pro směrování zpráv definovaní virtuálním hostitelem v rámci RabbitMQ. Výměna je zodpovědná za směrování zpráv do různých front pomocí atributů záhlaví, vazeb a směrovacích klíčů.
Vazba je „odkaz“, který nastavíte pro vazbu fronty na výměnu.
Směrovací klíčje atribut zprávy, na který se výměna dívá, když se rozhoduje, jak směrovat zprávu do front (v závislosti na typu výměny).
Výměny, spojení a fronty lze konfigurovat pomocí parametrů, jako je trvalý, dočasný a automatické smazání při vytvoření. Trvanlivé výměny přežijí restarty serveru a trvají, dokud nejsou explicitně smazány. Dočasné výměny existují, dokud není RabbitMQ vypnut. Automaticky smazané výměny jsou odstraněny, jakmile je poslední vázaný objekt z výměny odvázán.
V RabbitMQ existují čtyři různé typy výměn, které směrují zprávy různým způsobem pomocí různých parametrů a nastavení vazeb. Klienti mohou vytvářet vlastní výměny nebo používat předdefinované výchozí výměny, které jsou vytvořeny při prvním spuštění serveru.
- Producent publikuje zprávu do výměny.
- Výměna zprávu přijme a nyní je zodpovědná za směrování zprávy.
- Mezi frontou a výměnou musí být nastavena vazba. V tomto případě máme vazby na dvě různé fronty z burzy. Výměna směruje zprávy do front.
- Zprávy zůstávají ve frontě, dokud je nezpracuje konzument.
- Konzument zprávu zpracuje.
Pokud RabbitMQ a řazení zpráv do front neznáte, přečtěte siRabbitMQ pro začátečníky – co je RabbitMQ?než si přečtete o výměnách, směrovacích klíčích, hlavičkách a vazbách.
Přímá výměna
Přímá výměna doručuje zprávy do front na základě směrovacího klíče zpráv. Směrovací klíč je atribut zprávy přidaný producentem do záhlaví zprávy. Směrovací klíč si představte jako „adresu“, podle které výměna rozhoduje o směrování zprávy. zpráva jde do fronty (front) s vazebním klíčem, který přesně odpovídá směrovacímu klíči zprávy.
Typ přímé výměny je užitečný pro rozlišení zpráv publikovaných do stejné výměny pomocí jednoduchého řetězcového identifikátoru.
Výchozí výměna, kterou musí makléři AMQP poskytnout pro přímou výměnu, je „amq.direct“.
Představte si, že fronta A (create_pdf_queue) na obrázku níže (obrázek přímé výměny) je vázána na přímou výměnu (pdf_events) s vazebním klíčempdf_create.Když na přímou výměnu dorazí nová zpráva se směrovacím klíčempdf_create, výměna ji nasměruje do fronty, jejíž vazební_klíč = směrovací_klíč, v tomto případě do fronty A (create_pdf_queue).
Scénář 1
- Výměna: pdf_events
- Koleje A: create_pdf_queue
- Vazbový klíč mezi výměnou (pdf_events) a frontou A (create_pdf_queue): pdf_create
Scénář 2
- Výměna: pdf_events
- Koleje B: pdf_log_queue
- Vazba klíče mezi výměnou (pdf_events) a frontou B (pdf_log_queue): pdf_log
Příklad
Příklad: Zprávy jsou směrovány do fronty pdf_log_queue, protože směrovací klíč (pdf_log) odpovídá vazebnímu klíči (pdf_log).
Pokud směrovací klíč zprávy neodpovídá žádnému vazebnímu klíči, je zpráva vyřazena.
Výchozí výměna
Výchozí výměna je předem deklarovaná přímá výměna bez názvu, obvykle označovaná prázdným řetězcem. Při použití výchozí výměny je zpráva doručena do fronty se jménem rovnajícím se směrovacímu klíči zprávy. Každá fronta je automaticky svázána s výchozí výměnou se směrovacím klíčem, který je stejný jako název fronty.
Topická výměna
Topické výměny směrují zprávy do front na základě shody zástupných znaků mezi směrovacím klíčem a směrovacím vzorem, který je určen vazbou fronty. Zprávy jsou směrovány do jedné nebo více front na základě shody mezi klíčem směrování zpráv a tímto vzorem.
Klíč směrování musí být seznam slov ohraničený tečkou (.). Příklady jsouagreements.usaagreements.eu.stockholmcož v tomto případě identifikuje dohody, které jsou nastaveny pro společnost s kancelářemi na mnoha různých místech. Směrovací vzory mohou obsahovat hvězdičku („*“), která odpovídá slovu na určité pozici směrovacího klíče (např. směrovací vzor „agreements.*.*.b.*“ odpovídá pouze směrovacím klíčům, kde první slovo je „agreements“ a čtvrté slovo je „b“). Symbol libry („#“) označuje shodu s nulou nebo více slovy (např. směrovací vzor „agreements.eu.berlin.#“ odpovídá všem směrovacím klíčům začínajícím na „agreements.eu.berlin“).
Spotřebitelé uvádějí, která témata je zajímají (jako odběr kanálu pro jednotlivé značky). Spotřebitel vytvoří frontu a nastaví vazbu s daným směrovacím vzorem na výměnu. Všechny zprávy se směrovacím klíčem, které odpovídají směrovacímu vzoru, jsou směrovány do fronty a zůstanou tam, dokud spotřebitel zprávu nespotřebuje.
Výchozí výměna, kterou musí makléři AMQP poskytovat pro výměnu témat, je „amq.topic“.
Scénář 1
Obrázek vpravo ukazuje příklad, kdy má spotřebitel A zájem o všechny dohody v Berlíně.
- Exchange: agreements
- Queue A: berlin_agreements
- Vzor směrování mezi exchange (agreements) a frontou A (berlin_agreements): agreements.eu.berlin.#
- Příklad klíče pro směrování zpráv, který odpovídá: agreements.eu.berlin a agreements.eu.berlin.headstore
Scénář 2
Spotřebitel B má zájem o všechny dohody.
- Výměna: dohody
- Řada B: všechny_dohody
- Vzor směrování mezi výměnou (dohody) a řadou B (všechny_dohody): dohody.#
- Příklad klíče pro směrování zpráv, který odpovídá: agreements.eu.berlin a agreements.us
Scénář 3
Spotřebitel C má zájem o všechny dohody pro evropské hlavní sklady.
- Výměna: dohody
- Řada C: dohody_hlavního skladu
- Vzor směrování mezi výměnou (dohody) a řadou C (dohody_hlavního skladu): dohody.eu.*.headstore
- Příklad směrovacích klíčů zpráv, které budou odpovídat: agreements.eu.berlin.headstore a agreements.eu.stockholm.headstore
Příklad
Zpráva se směrovacím klíčem dohody.eu.berlinje odeslána na exchangeagreements.Zprávy jsou směrovány do frontyberlin_agreementsprotože směrovací vzor „agreements.eu.berlin.#“ odpovídá směrovacím klíčům začínajícím na „agreements.eu.berlin“. Zpráva je také směrována do frontyall_agreementsprotože směrovací klíč (agreements.eu.berlin) odpovídá směrovacímu vzoru (agreements.#).
Výměna fanout
Výměna fanout kopíruje a směruje přijatou zprávu do všech front, které jsou k ní vázány, bez ohledu na směrovací klíče nebo shodu vzorů jako u přímých a tematických výměn. Poskytnuté klíče budou jednoduše ignorovány.
Výměny fanout mohou být užitečné, když je třeba stejnou zprávu poslat do jedné nebo více front s konzumenty, kteří mohou stejnou zprávu zpracovávat různými způsoby.
Obrázek vpravo (výměna fanout) ukazuje příklad, kdy je zpráva přijatá výměnou zkopírována a směrována do všech tří front, které jsou s výměnou svázány. Mohlo by se jednat například o sportovní zprávy nebo aktualizace počasí, které by měly být rozeslány každému připojenému mobilnímu zařízení, když se něco stane.
Výchozí výměna AMQP, kterou musí makléři poskytovat pro výměnu témat, je „amq.fanout“.
Scénář 1
- Výměna: sport_news
- Queue A: Mobilní klientská fronta A
- Vazba: Vazba mezi burzou (sport_news) a frontou A (fronta mobilních klientů A)
Příklad
Zpráva je odeslána do burzyport_news. zpráva je směrována do všech front (fronta A, fronta B, fronta C), protože všechny fronty jsou vázány na burzu. Poskytnuté směrovací klíče jsou ignorovány.
Výměna hlaviček
Výměna hlaviček směruje zprávy na základě argumentů obsahujících hlavičky a volitelné hodnoty. Výměny hlaviček jsou velmi podobné výměnám témat, ale směrují zprávy na základě hodnot hlaviček místo směrovacích klíčů. Zpráva odpovídá, pokud se hodnota hlavičky rovná hodnotě zadané při vazbě.
Speciální argument s názvem „x-match“, přidaný ve vazbě mezi výměnou a frontou, určuje, zda musí odpovídat všechny hlavičky, nebo jen jedna. Jako shoda se počítá buď jakákoli společná hlavička mezi zprávou a vazbou, nebo musí být ve zprávě přítomny všechny hlavičky, na které odkazuje vazba, aby se shodovala. Vlastnost „x-match“ může nabývat dvou různých hodnot: „any“ nebo „all“, přičemž „all“ je výchozí hodnota. Hodnota „all“ znamená, že se musí shodovat všechny dvojice záhlaví (klíč, hodnota), zatímco hodnota „any“ znamená, že se musí shodovat alespoň jedna z dvojic záhlaví. Hlavičky lze sestavit s použitím širšího spektra datových typů, například celých čísel nebo hashů, namísto řetězce. Typ výměny hlaviček (použitý s vazebním argumentem „any“) je užitečný pro směrování zpráv, které obsahují podmnožinu známých (neuspořádaných) kritérií.
Výchozí výměna, kterou musí makléři AMQP poskytnout pro výměnu témat, je „amq.headers“.
Příklad
Scénář 3
Zpráva 3 je publikována do výměny s argumenty hlaviček (klíč = hodnota): „
Je třeba poznamenat, že při výměně hlaviček je skutečné pořadí dvojic klíč-hodnota ve zprávě irelevantní.
Výměna mrtvých dopisů
Není-li pro zprávu nalezena žádná odpovídající fronta, je zpráva tiše zahozena. RabbitMQ poskytuje rozšíření AMQP známé jako „Dead Letter Exchange“, které poskytuje funkci pro zachycení zpráv, které nelze doručit.
Prosím, napište nám na [email protected] máte nějaké návrhy ohledně chybějícího obsahu nebo jinou zpětnou vazbu.
Průvodce – RabbitMQ pro začátečníky
Líbí se vám tento článek? Nezapomeňte se o něj podělit s ostatními 😉
.