Výmena — je to výmenník alebo miesto výmeny. Sem sa posielajú správy. Výmena distribuuje správy do jednej alebo viacerých front. smeruje správy do fronty na základe vytvorených väzieb (viazania) medzi ním a frontou.
Výmena není . Z dôvodov škálovateľnosti exchange — je to reťazec (odkaz na modul s kódom, kde leží logika smerovania) vo vstavané databáze . 1 tisíc výmenníkov spotrebuje len 1MB pamäte.
Obsah
- RabbitMQ. Časť 3. Pochopenie Queues a Bindings
- RabbitMQ. Časť 4. Pochopíme, čo sú správy a rámce
- RabbitMQ. Časť 5. Výkon publikovania a spotreby správ
- RabbitMQ. Časť 6. Prehľad modulov Federation a Shovel
- RabbitMQ. Časť 7. Podrobne o Connection a Channel
- RabbitMQ. Časť 8. RabbitMQ v .NET
- RabbitMQ. Časť 9. Monitorovanie
Priama výmena
Priama výmena — sa používa, keď je potrebné dodať správu do určitých front. Správa sa zverejní vo výmenníku s konkrétnym smerovacím kľúčom a dostane sa do všetkých front, ktoré sú s týmto výmenníkom spojené rovnakým smerovacím kľúčom. Smerovací kľúč je reťazec. Hľadanie zhody prebieha prostredníctvom kontroly reťazcov na ekvivalenciu.
Grafické zobrazenie toku správ:

V rabbitmq existuje pojem predvolený výmenník. Je to priama výmena bez názvu. Ak sa používa predvolený výmenník, správa bude smerovaná do fronty s názvom zodpovedajúcim smerovaciemu kľúču správy.
Tématická výmena
Tématická výmena – podobne priama výmena umožňuje selektívne smerovanie porovnávaním smerovacieho kľúča. V tomto prípade je kľúč stanovený podľa šablóny. Pri vytváraní šablóny sa používajú 0 alebo viac slov (písmená AZ a az a číslice 0-9), oddelených bodkou, ako aj znaky * a #.
*— môžu byť nahradené presne1slovo#— môžu byť nahradené0alebo viacerými slovami
Grafické zobrazenie toku správ:

Začínajúc verziou RabbitMQ 2.4.0 algoritmus smerovania pre tématickú výmenu sa stal trikrát rýchlejším. Dosiahli to implementáciou prístupu 145 trie implementation a.b.c a.*.b.c, a.#.c, b.b.c a budú reprezentované nasledujúcou štruktúrou: Hľadanie zhody so šablónou sa uskutočňuje od koreňa a sleduje sa zhora nadol.

použitie tohto výmenníka môže byť
Funkcie:
- dobrou voľbou pre možné budúce rozšírenie aplikácie , pretože šablóny je vždy možné nastaviť tak, aby sa správa publikovala podobnevýmennej výmene
priama výmenaalebošablóny, ktoré používajú - oveľa rýchlejšie
*, ako šablóny, ktoré používajúPredvoľba výmeny#. tématickú výmenupomalšiepriama výmena
Predvoľba výmeny
všetky správy sa doručujú do všetkých front – aj keď je v správe nastavený smerovací kľúč. nefunguje so smerovacími kľúčmi a šablónami.
Funkcie:
RabbitMQnefunguje s smerovacími kľúčmi a šablónami. čo pozitívne vplýva na výkonnosť. Toto je najrýchlejšíexchange;- všetci používatelia by mali mať možnosť spracovávať všetky správy;
Grafické zobrazenie toku správ:

Exchange hlavičiek
Výmena hlavičiek — posiela správy do súvisiacich frontov na základe porovnania párov (kľúč, hodnota) vlastnosti hlavičky prípojných a podobne správy. hlavičky predstavuje Dictionary.
Ak do slovníka pridáte špeciálny kľúč x-match s hodnotou akýkoľvek, správa je smerovaná pri čiastočnom zhode párov (kľúč, hodnota). Toto správanie je podobné operátorovi ale.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");Predvolene kľúč x-match obsahuje hodnotu všetko. To znamená, že správa je smerovaná pri úplnom zhode párov (kľúč, hodnota). Toto správanie je podobné operátorovi a.
Grafické zobrazenie toku správ:

Funkcie:
- dodatočná flexibilita
- dodatočné náklady na výpočty. Všetky páry (kľúč, hodnota) atribútu
hlavičkymusí sa triediť podľa názvu kľúča pred výpočtom hodnôt smerovania správy. Pomalšie ako iné typy výmeny.
Consistent-Hashing Exchange
Táto výmena je a nie je zabudovaný v RabbitMQ.
Consistent-hashing exchange (výmena so súvislým hashovaním) – sa používa, keď existuje niekoľko frontov, ktoré sú potenciálnymi príjemcami správy, a keď je potrebné vyvážiť zaťaženie medzi nimi. Priradenie správy k fronte prebieha na základe váhy (podmienená reťazcová hodnota od 0 - n).
Rovnocenná váha frontov – znamená, že do každého frontu príde približne rovnaký počet správ (každá správa bude umiestnená iba do jednej fronty). Nie je zabezpečená úplná záruka rovnomerného rozdelenia správ.
Grafické zobrazenie toku správ:

Hash sa počíta na základe kľúča smerovania alebo vlastnosti hlavičky správy. Ak všetky publikované správy mali rôzne kľúče smerovania alebo hlavičky, rozdelenie sa uskutoční na základe váhy. Inak sa použije kľúč smerovania alebo hlavičky.
Malo by pomáhať, keď potrebuje spotrebiteľ širšiu šírku pásma, než je riešenie s viacerými spotrebiteľmi používajúcimi jeden front.
Kombinovanie výmen (E2E)
Správanie všetkých výmen sa dá kombinovať pomocou spojenia Exchange-to-Exchange (kombinovanie výmen nie je zahrnuté v špecifikácii AMQP. Toto je rozšírenie protokolu z pohľadu RabbitMQ).
Grafické zobrazenie toku správ:

Vďaka E2E môžeme nájsť správnu škálovateľnú konfiguráciu, ktorá vyhovuje súčasným aj rastúcim požiadavkám.
Vytvorenie Exchange
Vytvorenie výmeny prebieha pomocou synchronného RPC žiadania na server. Žiadosť sa uskutočňuje pomocou metódy Exchange.Declare, vyžaduje si parametre:
- názov výmeny
- typ výmeny
- iné parametre
Príklad vytvorenia exchange s pomocou :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange— názov výmeny, ktorú chceme vytvoriť. Názov musí byť jedinečný.type— typ výmenydurable— ak je nastavenétrue, takexchangebude trvalé. Bude uložené na disku a dokáže prežiť reštart servera/brokera. Ak je hodnotanepravda, takexchangedočasná, bude odstránená, keď bude server/broker reštartovaný.autoDelete— automatické mazanie.Výmenabude odstránené, keď budú odstránené všetky s ním súvisiace fronty.argumentoch— voliteľné argumenty. Najčastejšie sa prostredníctvom argumentov nastavujúalternative exchange(alternatívna výmena). Ak správa nemôže prejsť pôvodnou trasou, môže byť odoslaná do alternatívnej výmeny na pretrasovanie inou cestou.

Ak sa vytvorenie exchange možno, server zašle klientovi synchronné RPC odpovedi Exchange.DeclareOk. Ak sa vytvorenie nedá vykonať (nastal problém s požiadavkou Exchange.Declare), potom kanál sa zatvorí serverom pomocou asynchrónneho príkazu Channel.Close a klient dostane výnimku , ktorá bude obsahovať kód chyby a jej opis.
Výmena musí byť vytvorená pred publikovaním správ. Ak publikujete správu do neexistujúcej výmeny — RabbitMQ ticho ju odstráni.
Vytvorenie Exchange cez grafické rozhranie
Prihláste sa do ovládacieho panela RabbitMQ pod používateľom návštevník (username: návštevník a password: návštevník). Všimnite si, že používateľ návštevník sa môže pripojiť iba z lokálneho hostiteľa. Teraz prejdeme na kartu Exchanges a klikneme na Add a new exchange. Vyplňte vlastnosti:

Väčšina vlastností bola popísaná vyššie. Tu zdôrazníme, že ak nastavíte Internal, výmena bude môcť byť použitá len pre E2E. Producer nebude môcť odosielať správy na takúto výmenu.
Záver
Pri vývoji systému je praktické popisovať topológiu pomocou grafu. Ale predtým, než začnete stavať graf, je vhodné vyznačiť cesty s veľkým prenosom, pretože tie si vyžadujú vyššiu priepustnosť. (výkon). Potom je možné klasifikovať prevádzku. A až potom pristúpiť k výstavbe.
Ak v zostavenom grafe existuje konečné množstvo smerovacích kľúčov, je potrebné sa pozrieť na niekoľko šablóny, ktoré používajú, ktoré sú 1:1 spojené so smerovacím kľúčom. Pamätajme, že šablóny, ktoré používajú najrýchlejšie.
Ak počet trás smeruje k nekonečnu, je potrebné venovať pozornosť tématickú výmenu alebo, ak šablóna nie je potrebná, je možné zvoliť direct exchange, pretože je rýchlejší tématickú výmenu.
Kombinácie rôznych exchange by mali pomôcť nájsť správnu škálovateľnú konfiguráciu, ktorá vyhovuje ako aktuálnym, tak aj rastúcim požiadavkám systému.
Počet exchange a fronty by mali byť minimálne v porovnaní s počtom trás.
V nasledujúcom článku sa podrobnejšie zameriame na Queues a Bindings.
Odkazy
Zdroj: habr.com
