RabbitMQ. Del 2. Lletra amb Exchanges

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 Erlang procesom. Z vidika razširljivosti — ime izmenjevalnika — to je niz (povezava na modul s kodo, kjer je shranjena logika usmerjanja) v vgrajeni bazi podatkov mnesia. 1 tisoč menjavnikov bo porabilo le 1MB pomnilnika.

Taula de continguts

  • RabbitMQ. Del 1. Introducció. Erlang, AMQP i RPC
  • RabbitMQ. Del 2. Lletra amb Exchanges
  • 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:

RabbitMQ. Del 2. Lletra amb Exchanges

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čno 1 „replica“ (na primer, funkcija snd_ctl_add_slave() je bila zamenjana z snd_ctl_add_replica()), kar je povzročilo
  • # — lahko je zamenjan z 0 eno ali več besed.

Grafični prikaz toka sporočil:

RabbitMQ. Del 2. Lletra amb Exchanges

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 trie implementation,, 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:

RabbitMQ. Del 2. Lletra amb Exchanges

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 exchange ili fanout exchange,
  • predloge, ki uporabljajo * veliko hitreje, bolj kot predloge, ki uporabljajo #.
  • tema izmenjava poč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:

  • RabbitMQ ne 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:

RabbitMQ. Del 2. Lletra amb Exchanges

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:

RabbitMQ. Del 2. Lletra amb Exchanges

Značajke:

  • dodatna prilagodljivost
  • dodatni stroški pri izračunu. Vsi pari (ključ, vrednost) atributa glave morajo 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 vtičnik 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:

RabbitMQ. Del 2. Lletra amb Exchanges

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:

RabbitMQ. Del 2. Lletra amb Exchanges

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 RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • — ime izmenjevalnika — ime izmenjevalnika, ki ga želimo ustvariti. Ime mora biti edinstveno
  • type — tip izmenjevalnika
  • durables — če nastavite true, potem — ime izmenjevalnika bo stalno. Shranjeno bo na disku in preživelo ponovni zagon strežnika/brokerja. Če je vrednost false, potem — ime izmenjevalnika začasna, se bo izbrisala, ko se strežnik/broker znova zažene
  • autoDelete — samodejno brisanje. Exchange bo izbrisan, ko bodo izbrisane vse povezane vrste
  • argumenti — neobvezni argumenti. Najpogosteje preko argumentov določamo alternative 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.

RabbitMQ. Del 2. Lletra amb Exchanges

Č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 OperationInterruptedException, 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

RabbitMQ. Del 2. Lletra amb Exchanges

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 usmerjanja 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

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster