RabbitMQ. Dio 2. Razumijevanje razmjena

Exchange - mjenjač ili mjenjačnica. Na njega se šalju poruke. Exchange distribuira poruku u jednom ili više redova. On usmjerava poruke u red čekanja na temelju stvorenih poveznica (bindings) između njega i reda čekanja.

Exchange nije Erlang proces. Iz razloga skalabilnosti exchange je niz (veza na modul s kodom u kojem je logika usmjeravanja) u ugrađenoj bazi podataka mnezija. Tisuću izmjenjivača će zauzeti samo 1 MB memorije.

pregled sadržaja

  • RabbitMQ. Dio 1. Uvod. Erlang, AMQP i RPC
  • RabbitMQ. Dio 2. Razumijevanje razmjena
  • RabbitMQ. Dio 3. Razumijevanje redova čekanja i povezivanja
  • RabbitMQ. Dio 4. Suočavanje s onim što su poruke i okviri
  • RabbitMQ. Dio 5: Izvedba poruke objavljivanja i konzumiranja
  • RabbitMQ. Dio 6. Pregled modula Federation i Shovel
  • RabbitMQ. Dio 7. Pojedinosti o vezi i Chanelu
  • RabbitMQ. Dio 8. RabbitMQ u .NET-u
  • RabbitMQ. Dio 9. Praćenje

Izravna razmjena

Direct exchange - koristi se po potrebi dostaviti poruku određenim redovima čekanja. Poruka se objavljuje izmjenjivaču s određenim ključ za usmjeravanje i ulazi u sve redove koji su povezani s ovim izmjenjivačem sa sličnim ključem usmjeravanja. Ključ usmjeravanja je niz. Usklađivanje se vrši pomoću provjera jednakosti nizova.

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

В rabbitmq postoji koncept zadani izmjenjivač. To direct exchange bez imena. Ako se koristi zadani izmjenjivač, tada će poruka biti preusmjerena u red čekanja s imenom jednakim ključ za usmjeravanje poruka.

Razmjena tema

Topic exchange - sličan direct exchange omogućuje selektivno usmjeravanje usporedbom ključa za usmjeravanje. Ali, u ovom slučaju, ključ je dan po predlošku. Prilikom izrade predloška koristite 0 ili više riječi (slova AZ и az i brojevima 0-9), odvojene točkom, kao i simboli * и #.

  • * - može se zamijeniti s točno 1 слово
  • # - može se zamijeniti sa 0 ili više riječi

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

Počevši od verzije RabbitMQ 2.4.0 algoritam usmjeravanja za topic exchange počeo raditi do 145 puta brže. To su postigli implementacijom pristupa pokušati implementaciju, što podrazumijeva prikaz predložaka kao strukturu stabla. Na primjer šablone a.b.c, a.*.b.c, a.#.c и b.b.c bit će predstavljen sljedećom strukturom:

RabbitMQ. Dio 2. Razumijevanje razmjena

Podudaranje uzorka traži se počevši od korijena pa odozgo prema dolje.

Značajke:

  • korištenje ovog izmjenjivača može postati dobar izbor za mogući budući razvoj aplikacija, jer predlošci se uvijek mogu prilagoditi tako da se poruka objavi na sličan način direct exchange ili fanout exchange
  • predloške koji koriste * puno brženego predlošci koji koriste #.
  • topic exchange sporije direct exchange

Fanout Exchange

Fanout exchange - sve poruke se isporučuju svim redovima čekanja čak i ako je ključ usmjeravanja naveden u poruci.

Značajke:

  • RabbitMQ ne radi s ključevima za usmjeravanje i predlošcima što pozitivno utječe na učinak. Ovo je najbrže exchange;
  • svi potrošači moraju biti u mogućnosti obraditi sve poruke;

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

Razmjena zaglavlja

Headers exchange - usmjerava poruke u povezane redove na temelju usporedbe parova svojstava (ključ, vrijednost). headers vezanje i slično svojstvo poruke. headers je a Dictionary<ключ, значение>.

Ako rječniku dodate poseban ključ x-match s vrijednošću any, tada se poruka usmjerava ako se parovi (ključ, vrijednost) djelomično podudaraju. Ovo ponašanje je slično ponašanju operatora or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Zadana tipka x-match sadrži vrijednost all. To znači da se poruka usmjerava kada se parovi (ključ, vrijednost) potpuno podudaraju. Ovo ponašanje je slično ponašanju operatora and.

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

Značajke:

  • dodatnu fleksibilnost
  • dodatni troškovi računanja. Svi parovi (ključ, vrijednost) atributa headers moraju biti poredani po nazivu ključa prije izračunavanja vrijednosti usmjeravanja poruka. Sporije od ostalih vrsta razmjene.

Dosljedna razmjena raspršivanja

Ovaj izmjenjivač je uključiti и nije ugrađen в RabbitMQ.

Consistent-hashing exchange (hash-consistent exchange) - koristi se kada postoji više redova čekanja koji su potencijalni primatelji poruke i kada trebate balansirati opterećenje između njih. Poruka je pridružena redu čekanja prema težini (uvjetna vrijednost niza iz 0 - n).

Ekvivalentna težina redova - označava da će svaki red primati otprilike isti iznos poruka (svaka će poruka biti stavljena samo u jedan red). Ne postoji potpuno jamstvo jednolike distribucije poruka.

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

Hash izračunati na temelju ključa usmjeravanja ili svojstva headers poruke. Ako su sve objavljene poruke imale različite ključeve usmjeravanja, ili headers, tada će se distribucija dogoditi prema težini. U suprotnom će se koristiti ključ usmjeravanja ili headers.

Trebao bi pomoći kada propusnost potrošača treba porasti više od rješenja s više potrošača koji koriste isti red čekanja.

Kombinacija izmjenjivača (E2E)

Ponašanje svih izmjenjivača može se kombinirati komunikacijom Razmjena za razmjenu (kombinacija izmjenjivača nije uključena u specifikaciju AMQP. Ovo je proširenje protokola sa strane RabbitMQ).

Grafički prikaz toka poruke:

RabbitMQ. Dio 2. Razumijevanje razmjena

Po cijenu E2E možemo pronaći pravu skalabilnu konfiguraciju koja zadovoljava i trenutne i rastuće zahtjeve.

Stvorite Exchange

Izmjenjivač se stvara pomoću sinkronog RPC zahtjev poslužitelju. Zahtjev se postavlja pomoću metode Exchange.Declare, pozvan s parametrima:

  • ime izmjenjivača
  • tip izmjenjivača
  • druge opcije

Primjer stvaranja exchange uz pomoć RabbitMQ.Client:

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

  • exchange - naziv izmjenjivača koji želimo kreirati. Naziv mora biti jedinstven
  • type - vrsta izmjenjivača
  • durable - ako je instaliran truetada exchange bit će trajno. Bit će pohranjen na disku i moći će preživjeti ponovno pokretanje poslužitelja/brokera. Ako vrijednost falsetada exchange je privremen i bit će uklonjen kada se poslužitelj/broker ponovno pokrene
  • autoDelete - automatsko brisanje. Exchange će se izbrisati kada se izbrišu svi povezani redovi čekanja
  • arguments su izborni argumenti. Najčešće, kroz niz argumenata alternative exchange (alternativni izmjenjivač). Ako poruka ne može proći izvornom rutom, može se poslati alternativnoj razmjeni kako bi se usmjerila drugom stazom.

RabbitMQ. Dio 2. Razumijevanje razmjena

Ako stvaranje exchange možda, tada će poslužitelj poslati klijentu sinkroni RPC odgovoriti Exchange.DeclareOk. Ako stvaranje je nemoguće (došlo je do odbijanja zahtjeva Exchange.Declare), onda kanal će se zatvoriti poslužitelj koji koristi asinkronu naredbu Channel.Close a klijent će dobiti iznimku OperationInterruptedException, koji će sadržavati šifru pogreške i njen opis.

Izmjenjivač mora biti kreiran prije objave. Ako objavite poruku na nekom nepostojećem izmjenjivaču - RabbitMQ tiho ga ukloniti.

Stvorite GUI za Exchange

Idite na administrativnu ploču RabbitMQ pod korisnikom guest (Korisničko ime: guest i lozinka: guest). Imajte na umu da korisnik guest može se povezati samo s lokalnog hosta. Sada idemo na karticu Exchanges i kliknite na Add a new exchange. Ispunite svojstva:

RabbitMQ. Dio 2. Razumijevanje razmjena

Većina svojstava je gore opisana. Ovdje napominjemo da ako postavimo Internal, tada se razmjena može koristiti samo za E2E. Producer neće moći slati poruke takvoj razmjeni.

Zaključak

Pri razvoju sustava zgodno je opisati topologiju usmjeravanje pomoću grafikona. Ali prije nego počnete graditi grafikon, vrijedi istaknuti staze s velikim prometom, jer. zahtijevaju veća propusnost (izvođenje). Zatim možete klasificirati promet. I onda počnite graditi.

Ako u konstruiranom grafu postoji konačni skup ključeve za usmjeravanje, vrijedi pogledati prema nekoliko njih fanout exchange, koji su 1:1 povezani s ključem usmjeravanja. Zapamti to fanout exchange najbrži.

Ako je broj ruta teži beskonačnosti, vrijedi obratiti pozornost topic exchange ili, ako predložak nije potreban, možete odabrati direct exchnge, jer on je brži topic exchange.

Kombinacije raznih exchange trebao bi vam pomoći da pronađete onu pravu. skalabilna konfiguracija, koji zadovoljava i trenutne i rastuće zahtjeve sustava.

Broj exchange a redovi bi trebali biti minimalni u usporedbi s brojem ruta.

U sljedećem članku počet ćemo shvaćati više o redovima čekanja i vezama.

reference

Izvor: www.habr.com

Dodajte komentar