Exchange - výměník nebo výměnné místo. Na něj se posílají zprávy. Exchangedistribuuje zprávu v jedné nebo více frontách. On směruje zprávy do fronty na základě vytvořených odkazů (bindings) mezi ním a frontou.
Exchange není Erlangův proces. Z důvodů škálovatelnosti exchange je řetězec (odkaz na modul s kódem, kde je logika směrování) ve vložené databázi Paměť. 1 tisíc výměníků spotřebuje pouze 1 MB paměti.
RabbitMQ. Část 4. Zacházení s tím, co jsou zprávy a rámce
RabbitMQ. Část 5: Publikování a konzumace zpráv
RabbitMQ. Část 6. Přehled modulů Federation a Shovel
RabbitMQ. Část 7. Podrobnosti o Connection a Chanel
RabbitMQ. Část 8. RabbitMQ v .NET
RabbitMQ. Část 9. Monitorování
Přímá výměna
Direct exchange - používá se v případě potřeby doručit zprávu do konkrétních front. Zpráva je zveřejněna výměníku s konkrétním směrovací klíč a dostane se do všech front spojených s tímto výměníkem s podobným směrovacím klíčem. Směrovací klíč je řetězec. Párování se provádí pomocí kontrola rovnosti řetězců.
Grafické znázornění toku zpráv:
В rabbitmq existuje koncept výchozí výměník. To direct exchange beze jména. Pokud je použit výchozí výměník, bude zpráva směrována do fronty s názvem rovným klíč pro směrování zpráv.
Výměna témat
Topic exchange – podobný direct exchange umožňuje selektivní směrování porovnáním směrovacího klíče. Ale v tomto případě je klíč dán podle šablony. Při vytváření šablony použijte 0 nebo více slov (písmen AZ и az a čísla 0-9), oddělené tečkou, stejně jako symboly * и #.
* - lze přesně nahradit 1 slovo
# - lze nahradit 0 nebo více slov
Grafické znázornění toku zpráv:
Počínaje verzí RabbitMQ 2.4.0 směrovací algoritmus pro topic exchange začal pracovat až do 145 krát rychlejší. Dosáhli toho implementací tohoto přístupu zkuste implementaci, což implikuje reprezentaci šablon jako stromové struktury. Například šablony a.b.c, a.*.b.c, a.#.c и b.b.c bude reprezentována následující strukturou:
Shoda vzorů se prohledává od kořene směrem shora dolů.
Vlastnosti:
použití tohoto výměníku se může stát dobrá volba pro možný budoucí vývoj aplikací, protože šablony lze vždy upravit tak, aby zpráva byla publikována podobně direct exchange nebo fanout exchange
šablony, které používají *mnohem rychlejšínež šablony, které používají #.
topic exchange pomalejší direct exchange
Výměna Fanout
Fanout exchange - všechny zprávy jsou doručeny do všech front i když je ve zprávě uveden směrovací klíč.
Vlastnosti:
RabbitMQnefunguje se směrovacími klíči a šablonami což má pozitivní vliv na výkon. Toto je nejrychlejší exchange;
všichni spotřebitelé musí být schopni zpracovat všechny zprávy;
Grafické znázornění toku zpráv:
Výměna záhlaví
Headers exchange - směruje zprávy do souvisejících front na základě porovnání dvojic (klíč, hodnota) vlastností headers vazba a podobná vlastnost zprávy. headers je a Dictionary<ключ, значение>.
Pokud do slovníku přidáte speciální klíč x-match s hodnotou any, pak je zpráva směrována, pokud se dvojice (klíč, hodnota) částečně shodují. Toto chování je podobné jako u operátora or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Výchozí klíč x-match obsahuje hodnotu all. To znamená, že zpráva je směrována, když se dvojice (klíč, hodnota) zcela shodují. Toto chování je podobné jako u operátora and.
Grafické znázornění toku zpráv:
Vlastnosti:
další flexibilita
další výpočetní režie. Všechny páry (klíč, hodnota) atributu headers musí být před výpočtem hodnot směrování zpráv seřazeny podle názvu klíče. Pomalejší než jiné typy směny.
Konzistentní hashovací výměna
Tento výměník je zapojit и není zabudován в RabbitMQ.
Consistent-hashing exchange (hash-consistent exchange) – používá se, když existuje více front, které jsou potenciálními příjemci zprávy, a když mezi nimi potřebujete načíst rovnováhu. Zpráva je přiřazena k frontě podle váhy (podmíněná řetězcová hodnota z 0 - n).
Ekvivalentní váha front – udává, že každá fronta obdrží zhruba stejnou částku zprávy (každá zpráva bude zařazena pouze do jedné fronty). Neexistuje úplná záruka jednotné distribuce zpráv.
Grafické znázornění toku zpráv:
Hash vypočítané na základě směrovacího klíče nebo vlastnosti headers zprávy. Pokud by všechny publikované zprávy měly různé směrovací klíče, popř headers, pak dojde k rozdělení podle hmotnosti. V opačném případě bude použit směrovací klíč, popř headers.
Mělo by pomoci, když propustnost spotřebitelů potřebuje růst výše než řešení s více zákazníky používajícími stejnou frontu.
Kombinace výměníků (E2E)
Chování všech výměníků lze kombinovat pomocí komunikace Exchange-to-Exchange (kombinace výměníků není součástí specifikace AMQP. Toto je rozšíření protokolu ze strany RabbitMQ).
Grafické znázornění toku zpráv:
Na úkor E2E dokážeme najít správnou škálovatelnou konfiguraci, která splňuje současné i rostoucí požadavky.
Vytvořte Exchange
Výměník je vytvořen pomocí synchronního RPC požadavek na server. Žádost se provádí pomocí metody Exchange.Declare, voláno s parametry:
exchange - název výměníku, který chceme vytvořit. Název musí být jedinečný
type - typ výměníku
durable - pokud je nainstalován truepak exchange bude trvalý. Bude uložen na disku a bude schopen přežít restart serveru/brokera. Pokud je hodnota falsepak exchange je dočasný a bude odstraněn po restartování serveru/brokera
autoDelete - automatické mazání. Exchange budou odstraněny, když budou odstraněny všechny přidružené fronty
arguments jsou volitelné argumenty. Nejčastěji prostřednictvím sady argumentů alternative exchange (alternativní výměník). Pokud zpráva nemůže projít původní cestou, může být odeslána na alternativní ústřednu, aby byla směrována jinou cestou.
Pokud tvoření exchangemožná, pak server odešle klientovi synchronní RPC odpověď Exchange.DeclareOk. Pokud tvoření je nemožné (žádost byla zamítnuta Exchange.Declare), pak kanál se uzavře server pomocí asynchronního příkazu Channel.Close a klient dostane výjimku OperationInterruptedException, který bude obsahovat kód chyby a její popis.
Před zaúčtováním musí být vytvořen výměník. Pokud zveřejníte zprávu nějakému neexistujícímu výměníku - RabbitMQ tiše jej odstraňte.
Vytvořte grafické uživatelské rozhraní Exchange
Přejděte na panel správce RabbitMQ pod uživatelem guest (uživatelské jméno: guest a heslo: guest). Vezměte prosím na vědomí, že uživatel guest lze se připojit pouze z localhost. Nyní přejdeme na záložku Exchanges a klikněte na Add a new exchange. Vyplňte vlastnosti:
Většina vlastností byla popsána výše. Zde si všimneme, že pokud nastavíme Internal, pak lze výměnu použít pouze pro E2E. Producer nebude moci posílat zprávy na takovou ústřednu.
Závěr
Při vývoji systému je vhodné popsat topologii směrování pomocí grafu. Než se ale pustíte do sestavování grafu, vyplatí se zvýraznit cesty s vysokou návštěvností, protože. vyžadují vyšší propustnost (výkon). Dále můžete klasifikovat provoz. A pak začít stavět.
Pokud v sestrojeném grafu existuje konečná množina směrovací klíče, pak stojí za to podívat se na několik fanout exchange, které jsou 1:1 související se směrovacím klíčem. Pamatuj si to fanout exchange nejrychlejší.
Pokud počet tras inklinuje k nekonečnu, stojí za to věnovat pozornost topic exchange nebo, pokud šablona není potřeba, můžete si vybrat direct exchnge, protože je rychlejší topic exchange.
Kombinace různých exchange by vám měl pomoci najít ten správný. škálovatelná konfigurace, který splňuje současné i rostoucí systémové požadavky.
Číslo exchange a fronty by měly být minimální ve srovnání s počtem tras.
V příštím článku začneme chápat více o frontách a vazbách.