Exchange — menjavnik ali točka menjanja. Vanj se pošiljajo sporočila. Exchange porazdeli sporočilo v eno ali več čakalnih vrst. usmerja sporočila v čakalno vrsto na podlagi ustvarjenih povezav (veze) med njim in čakalno vrsto.
Exchange ni . Z vidika razširljivosti — ime izmenjevalnika — to je niz (povezava na modul s kodo, kjer je shranjena logika usmerjanja) v vgrajeni bazi podatkov . 1 tisoč menjavnikov 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
Direct Exchange
Direktna izmenjava — se uporablja, kadar je potrebno dostaviti sporočilo v določene čakalne vrste.. Sporočilo se objavi v menjavniku s specifičnim usmerjevalnim ključem in pride v vse čakalne vrste, povezane s tem menjavnikom z enakim usmerjevalnim ključem. Usmerjevalni ključ je niz. Iskanje ujemanja poteka preko preverjanja nizov na enakovrednost..
Grafični prikaz toka sporočil:

V rabbitmq obstaja pojmovanje menjavnika po privzetku. To je direct exchange brez imena. Če se uporablja menjavnik po privzetku, se bo sporočilo usmerjalo v čakalno vrsto z imenom, enakim usmerjevalnemu ključu sporočila..
Topic Exchange
Tema izmenjava – podobno direct exchange omogoča selektivno usmerjanje z primerjavo usmerjevalnega ključa. V tem primeru se ključ določi na podlagi predloge,. Pri ustvarjanju predloge se uporabljajo 0 eno ali več besed (črke AZ in az in številke 0-9), ločene s piko, ter simboli * in #.
*— lahko je zamenjan z natančno1„replica“ (na primer, funkcija snd_ctl_add_slave() je bila zamenjana z snd_ctl_add_replica()), kar je povzročilo#— lahko je zamenjan z0eno ali več besed.
Grafični prikaz toka sporočil:

Začnite z različico RabbitMQ 2.4.0 algoritem usmerjanja za tema izmenjava je začel delovati do 145 raz hitreje. Dosegli so to z uvedbo pristopa , ki predvideva predstavitev predlog v obliki drevesne strukture. Na primer, predloge: a.b.c, a.*.b.c, a.#.c in b.b.c bodo predstavljene z naslednjo strukturo:

Iskanje ujemanja s predlogo se začne pri korenu in poteka od zgoraj navzdol.
Značajke:
- uporaba tega menjavnika je lahko dobra izbira za morebitni nadaljnji razvoj aplikacije,, saj je predloge vedno mogoče prilagoditi, da se sporočilo objavi podobno
direct exchangeilifanout exchange, - predloge, ki uporabljajo
*veliko hitreje, bolj kot predloge, ki uporabljajo#. tema izmenjavapočasneje.direct exchange
Fanout Exchange
Fanout izmenjava – vsa sporočila se dostavijo v vse čakalne vrste tudi če je v sporočilu določen usmerjevalni ključ.
Značajke:
RabbitMQne deluje s usmerjevalnimi ključi in predlogami, kar pozitivno vpliva na zmogljivost. To je najhitrejši.— ime izmenjevalnika;- Vsi uporabniki morajo imeti možnost obdelave vseh sporočil;
Grafični prikaz toka sporočil:

Menjava glave
Menjava glav — usmerja sporočila v povezane vrste na podlagi primerjave parov (ključ, vrednost) lastnosti glave vezij in podobnih lastnosti sporočila. glave predstavlja Dictionary.
Če dodate poseben ključ v slovar x-match z vrednostjo any, sporočilo se usmeri pri delnem ujemanju parov (ključ, vrednost). To vedenje je podobno operatorju or.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");Privzeto ključ x-match vsebuje vrednost all. To pomeni, da se sporočilo usmeri pri popolnem ujemanju parov ( ključ, vrednost). To vedenje je podobno operatorju in.
Grafični prikaz toka sporočil:

Značajke:
- dodatna prilagodljivost
- dodatni stroški pri izračunu. Vsi pari (ključ, vrednost) atributa
glavemorajo biti razvrščeni po imenu ključ pred izračunom vrednosti usmerjanja sporočila. Počasnejši kot druge vrste exchange.
Consistent-Hashing Exchange
Ta menjava je in ni vgrajen u RabbitMQ.
Consistent-hashing exchange (menjava s doslednim hashranjem) – se uporablja, kadar obstaja več vrst, ki so potencialni prejemniki sporočila, in kadar je potrebno uravnotežiti obremenitev med njimi. Povezava sporočila z vrsto se zgodi na podlagi teže (pogojna nizovna vrednost od 0 - n).
Enakovredna teža vrst – pomeni, da se v vsako vrsto pošlje približno enako število sporočil (vsako sporočilo bo poslano le v eno vrsto). Popolne garancije za enakomerno razporeditev sporočil ni.
Grafični prikaz toka sporočil:

Hash se izračuna na podlagi ključ usmerjanja ali lastnosti glave sporočila. Če so imela vsa objavljena sporočila različne ključe usmerjanja ali glave, se bo razporeditev zgodila na podlagi teže. V nasprotnem primeru se bo uporabil ključ usmerjanja ali glave.
Moral bi pomagati, ko je pasovna širina porabnika potrebna za povečanje bolj kot rešitev z več porabniki, ki uporabljajo eno vrsto.
Kombiniranje menjav (E2E)
Vedenje vseh menjav lahko kombiniramo z uporabo povezave Exchange-to-Exchange (kombiniranje menjav ni vključeno v specifikacijo AMQP. To je razširitev protokola s strani RabbitMQ).
Grafični prikaz toka sporočil:

Zaradi E2E lahko najdemo pravilno skalabilno konfiguracijo, ki izpolnjuje tako trenutne kot rastoče zahteve.
Ustvarjanje Exchange
Ustvarjanje izmenjevalnika poteka s pomočjo sinhroniziranega RPC zahteve na strežnik. Zahteva se izvede z uporabo metode Exchange.Declare, ki se pokliče s parametri:
- ime izmenjevalnika
- tip izmenjevalnika
- 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 izmenjevalnika, ki ga želimo ustvariti. Ime mora biti edinstvenotype— tip izmenjevalnikadurables— če nastavitetrue, potem— ime izmenjevalnikabo stalno. Shranjeno bo na disku in preživelo ponovni zagon strežnika/brokerja. Če je vrednostfalse, potem— ime izmenjevalnikazačasna, se bo izbrisala, ko se strežnik/broker znova zaženeautoDelete— samodejno brisanje.Exchangebo izbrisan, ko bodo izbrisane vse povezane vrsteargumenti— neobvezni argumenti. Najpogosteje preko argumentov določamoalternative exchange(alternativni izmenjevalnik). Če sporočilo ne more preiti po prvotni poti, ga je mogoče poslati v alternativni izmenjevalnik za usmerjanje po drugi poti.

Če je ustvarjanje — ime izmenjevalnika mogoče, bo strežnik stranki poslal sinhronizirano RPC odgovor Exchange.DeclareOk. Če je ustvarjanje ni mogoče (zahtevek je bil zavrnjen Exchange.Declare), bo kanal zaprl po strežniku s pomočjo asinhronega ukaza Channel.Close in stranka bo prejela izjemo , ki bo vsebovala kodo napake in njeno opis.
Izmenjevalnik mora biti ustvarjen pred objavo sporočil. Če objavite sporočilo v neobstoječ izmenjevalnik — RabbitMQ ga bo tiho izbrisal.
Ustvarjanje Exchange preko 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 Dodaj nov izmenjevalnikKo vpišemo vse potrebne podatke in pritisnemo na

Večina lastnosti je bila opisana zgoraj. Tu bomo omenili, da če nastavite Notranji, se izmenjevalnik lahko uporablja le za E2E. Producer ne bo mogel pošiljati sporočil v tak izmenjevalnik.
Zaključek
Pri razvijanju sistema je priročno opisati topologijo s pomočjo grafa. A preden začnete graditi graf, je vredno izpostaviti poti z večjim prometom, saj prav te zahtevajo višjo propustnost (zmogljivost). Nato lahko klasificirate promet. In šele potem začnete z gradnjo.
Če v zgrajenem grafu obstaja končno število ključev usmerjanja, potem je smiselno pogledati v smer več fanout exchange,, ki so 1:1 povezani s ključem usmerjanja. Ne pozabite, da je fanout exchange, najhitrejši.
Če se število poti neovirano približuje neskončnosti, potem je smiselno posvetiti pozornost tema izmenjava ali, če vzorec ni potreben, lahko izberete direct exchange, saj je hitrejši. tema izmenjava.
Kombinacije različnih — ime izmenjevalnika bi morale pomagati najti pravo razširljivo konfiguracijo, ki zadostuje tako trenutnim kot rastočim potrebam sistema.
Količina — ime izmenjevalnika in vrst naj bi bilo minimalno v primerjavi s številom poti.
V naslednjem članku se bomo podrobneje ukvarjali z vrstami in vezavami.
Povezave
Izvor: habr.com
