RabbitMQ. Del 2. Lletra amb Exchanges

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 Erlang procesom. Z vidika skalabilnosti — ime izmenjevalnika — to je niz (povezava na modul s kodo, kjer se nahaja logika usmerjanja) v vgrajeni bazi podatkov mnesia. 1000 izmenjevalnikov 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

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:

RabbitMQ. Del 2. Lletra amb Exchanges

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

Grafični prikaz toka sporočil:

RabbitMQ. Del 2. Lletra amb Exchanges

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

RabbitMQ. Del 2. Lletra amb Exchanges

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 izmenjava ili izmenjavi fetan
  • vzorce, ki uporabljajo * veliko hitreje, kot vzorce, ki uporabljajo #.
  • tematsko izmenjavo počasneje neposredna 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:

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

RabbitMQ. Del 2. Lletra amb Exchanges

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:

RabbitMQ. Del 2. Lletra amb Exchanges

Značajke:

  • dodatna prilagodljivost
  • dodatni stroški izračuna. Vse pare (kljuc, vrednost) atributa glave je 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 vtičnik 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:

RabbitMQ. Del 2. Lletra amb Exchanges

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:

RabbitMQ. Del 2. Lletra amb Exchanges

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

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

  • — ime izmenjevalnika — ime menjave, ki jo želimo ustvariti. Ime mora biti edinstveno
  • type — vrsta menjave
  • durables — če nastavite true, potem — ime izmenjevalnika bo stalna. Shranjena bo na disku in bo preživela ponovni zagon strežnika/brokera. Č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 izbrisana, ko bodo izbrisane vse povezane s tem vrste
  • argumenti — neobvezni argumenti. Pogosto se prek argumentov določijo alternative 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.

RabbitMQ. Del 2. Lletra amb Exchanges

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

RabbitMQ. Del 2. Lletra amb Exchanges

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

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