Exchange — izmenjavalnik ali točka izmenjave. Tja se pošiljajo sporočila. Exchange porazdeli sporočilo v eno ali več vrst. usmerja sporočila v čakalno vrsto na podlagi ustvarjenih povezav (veze) med njim in vrsto.
Exchange ni . Z vidika skalabilnosti — ime izmenjevalnika — to je niz (povezava na modul s kodo, kjer se nahaja logika usmerjanja) v vgrajeni bazi podatkov . 1000 izmenjevalnikov bo porabilo le 1MB pomnilnika.
Taula de continguts
- RabbitMQ. Del 3. Lletra amb Queues i Bindings
- RabbitMQ. Del 4. Lletra amb què són els missatges i els encapsulaments
- RabbitMQ. Del 5. Rendiment de la publicació i consum de missatges
- RabbitMQ. Del 6. Visió general dels mòduls Federation i Shovel
- RabbitMQ. Del 7. Detalls sobre la connexió i el canal
- RabbitMQ. Del 8. RabbitMQ en .NET
- RabbitMQ. Del 9. Monitoratge
Neposredna izmenjava
Neposredna izmenjava — uporablja se, ko je potrebno dostaviti sporočilo v določene vrste. Sporočilo se objavi v izmenjevalniku z določenim ključem usmerjanja in pride v vse vrste, povezane s tem izmenjevalnikom z istim ključem usmerjanja. Ključ usmerjanja je niz. Iskanje ujemanja poteka z preverjanjem nizov na enakost.
Grafični prikaz toka sporočil:

V rabbitmq obstaja pojem izmenjevalnika po privzetku. To je neposredna izmenjava brez imena. Če se uporablja izmenjevalnik po privzetku, bo sporočilo usmerjeno v vrsto z imenom enakim kluču usmerjanja sporočila.
Tematska izmenjava
Tematska izmenjava – podobno neposredna izmenjava omogoča selektivno usmerjanje z primerjanjem ključa usmerjanja. V tem primeru se ključ določi s poštnim vzorcem. Pri ustvarjanju vzorca se uporablja 0 eno ali več besed (črk AZ in az in številk 0-9). Razdeljene so s piko, poleg tega pa simboli * in #.
*— je mogoče zamenjati z natančno1„replica“ (na primer, funkcija snd_ctl_add_slave() je bila zamenjana z snd_ctl_add_replica()), kar je povzročilo#— lahko zamenja0eno ali več besed
Grafični prikaz toka sporočil:

Od različice RabbitMQ 2.4.0 je algoritem usmerjanja za tematsko izmenjavo začel delovati do 145 enkrat hitreje. To so dosegli z uvedbo pristopa , ki predvideva predstavitev vzorcev v obliki drevesne strukture. Na primer, vzorci a.b.c, a.*.b.c, a.#.c in b.b.c bodo predstavljeni z naslednjo strukturo:

Iskanje ujemanja z vzorcem se začne pri korenu in se spušča od zgoraj navzdol.
Značajke:
- uporaba tega izmenjevalnika je lahko dober izbor za morebitno prihodnje širitev aplikacije, saj je mogoče vzorce vedno nastaviti tako, da se sporočilo objavi podobno
neposredna izmenjavailiizmenjavi fetan - vzorce, ki uporabljajo
*veliko hitreje, kot vzorce, ki uporabljajo#. tematsko izmenjavopočasnejeneposredna izmenjava
Fetan izmenjava
Fetan izmenjava – so vsa sporočila dostavljena v vse vrste tudi če je v sporočilu določen ključ usmerjanja.
Značajke:
RabbitMQne deluje s ključi usmerjanja in vzorci kar pozitivno vpliva na učinkovitost. To je najhitrejše.— ime izmenjevalnika;- Vsi uporabniki morajo imeti možnost obravnavati vsa sporočila;
Grafični prikaz toka sporočil:

Menjalniki glave
Menjanje glav — usmerja sporočila v povezane čakalne vrste na podlagi primerjave parov (kljuc, vrednost) lastnosti glave vezij in sorodnih lastnosti sporočila. glave predstavlja Dictionary<kljuc, vrednost>.
Če v slovar dodamo posebno ključno besedo x-match z vrednostjo katerakoli, potem se sporočilo usmeri pri delnem ujemanju parov (kljuc, vrednost). To vedenje je podobno operatorju ali.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "katerakoli");Privzeto ključ x-match ima vrednost all. To pomeni, da se sporočilo usmeri pri popolnem ujemanju parov (kljuc, vrednost). To vedenje je podobno operatorju in.
Grafični prikaz toka sporočil:

Značajke:
- dodatna prilagodljivost
- dodatni stroški izračuna. Vse pare (kljuc, vrednost) atributa
glaveje treba razvrstiti po imenu ključa pred izračunavanjem vrednosti usmerjanja sporočil. Počasnejši od drugih tipov menjalnika.
Consistent-Hashing Exchange
Ta menjalnik je in ni vgrajen u RabbitMQ.
Consistent-hashing exchange (menjalnik s konsistentnim heširanjem) – se uporablja, ko obstaja več čakalnih vrst, ki lahko potencialno prejemajo sporočilo in ko je potrebno uravnotežiti obremenitev med njimi. Povezava sporočila s čakalno vrsto poteka po teži (pogojna nizovna vrednost od 0 - n).
Ekvivalentna teža čakalnih vrst – pomeni, da bo vsaka čakalna vrsta prejela približno enako število sporočil (vsako sporočilo bo dano samo v eno čakalno vrsto). Nobene popolne garancije enakomerne porazdelitve sporočil ni.
Grafični prikaz toka sporočil:

Hash se izračuna na podlagi ključa usmerjanja ali lastnosti glave sporočila. Če so imela vsa objavljena sporočila različne ključe usmerjanja ali glave, potem se bo porazdelitev izvajala po teži. V nasprotnem primeru se bo uporabljal ključ usmerjanja ali glave.
Moral bi pomagati, ko potrebna prepustnost porabnika potrebuje rast bolj kot rešitev s več porabniki, ki uporabljajo eno čakalno vrsto.
Kombinacije menjalnikov (E2E)
Vedenje vseh menjalnikov lahko kombiniramo s povezovanjem Exchange-to-Exchange (kombinacija menjalnikov ni vključena v specifikacijo AMQP. To je razširitev protokola s strani RabbitMQ).
Grafični prikaz toka sporočil:

Zaradi E2E lahko najdemo pravo skalabilno konfiguracijo, ki ustreza tako trenutnim kot tudi rastočim zahtevam.
Ustvarjanje Exchange
Ustvarjanje menjave poteka sinhronizirano RPC zahteve na strežnik. Zahteva se izvede z uporabo metode Exchange.Declare, ki se pokliče s parametri:
- ime menjave
- vrsta menjave
- ostali parametri
Primer ustvarjanja — ime izmenjevalnika s pomočjo :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...— ime izmenjevalnika— ime menjave, ki jo želimo ustvariti. Ime mora biti edinstvenotype— vrsta menjavedurables— če nastavitetrue, potem— ime izmenjevalnikabo stalna. Shranjena bo na disku in bo preživela ponovni zagon strežnika/brokera. Če je vrednostfalse, potem— ime izmenjevalnikazačasna, se bo izbrisala, ko se strežnik/broker znova zaženeautoDelete— samodejno brisanje.Exchangebo izbrisana, ko bodo izbrisane vse povezane s tem vrsteargumenti— neobvezni argumenti. Pogosto se prek argumentov določijoalternative exchange(alternativna menjava). Če sporočilo ne more biti posredovano po prvotni poti, ga je mogoče poslati v alternativno menjavo za preusmeritev po drugi poti.

Če ustvarjanje — ime izmenjevalnika mogoče, bo strežnik stranki poslal sinhronizirano RPC odgovor Exchange.DeclareOk. Če ustvarjanje ni mogoče (zahtevek je bil zavrnjen Exchange.Declare), bo kanal zaprl s strežnikom prek asinhronega ukaza Channel.Close in stranka bo prejela izjemo , ki bo vsebovala kodo napake in njeno opis.
Menjava mora biti ustvarjena pred objavo sporočil. Če objavite sporočilo v neobstoječo menjavo — RabbitMQ ga bo tiho izbrisala.
Ustvarjanje Exchange prek grafičnega vmesnika
Prijavimo se v administrativni panel RabbitMQ pod uporabnikom guest (uporabniško ime: guest in geslo: guest). Upoštevajte, da se lahko uporabnik poveže le z lokalnega gostitelja. Zdaj preidimo na zavihek guest Queues Exchanges Dodaj novo vrsto Dodajte novo menjavoKo vpišemo vse potrebne podatke in pritisnemo na

Večina lastnosti je bila opisana zgoraj. Tukaj naj opozorimo, da če določite Notranji, se lahko menjava uporablja samo za E2E. Producer ne more pošiljati sporočil v tako menjavo.
Zaključek
Pri razvoju sistema je priročno opisovati topologijo s pomočjo grafa. Preden začnete graditi graf, je smiselno izpostaviti poti z visokim prometom, saj te zahtevajo višjo propustnost (zmogljivost). Nato lahko klasificirate promet. Potem se lahko lotite gradnje.
Če v zgrajenem grafu obstaja končno število ključev usmerjanja, je smiselno razmisliti o več izmenjavi fetan, ki so 1:1 povezani s ključem usmerjanja. Ne pozabite, da izmenjavi fetan je najhitrejša.
Če se število usmeritev navezuje k neskončnosti, bodite pozorni na tematsko izmenjavo ali, če vzorec ni potreben, lahko izberete direct exchange, saj je hitrejša tematsko izmenjavo.
Kombinacije različnih — ime izmenjevalnika morajo pomagati najti pravo razširljivo konfiguracijo, ki ustreza tako trenutnim kot rastočim potrebam sistema.
Količina — ime izmenjevalnika in vrstic mora biti najmanjša v primerjavi s številom usmeritev.
V naslednjem članku bomo podrobneje obravnavali vrste in povezave.
Povezave
Izvor: habr.com
