RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Exchange - vaihdin tai vaihtopiste. Sille lähetetään viestejä. Exchange jakaa viestin yhdessä tai useammassa jonossa. Hän reitittää viestit jonoon luotujen linkkien perusteella (bindings) sen ja jonon välillä.

Exchange ei ole Erlang-prosessi. Skaalautuvuussyistä exchange on merkkijono (linkki moduuliin koodilla, jossa reitityslogiikka sijaitsee) sisäänrakennetussa tietokannassa mnesia. 1 vaihdinta kuluttaa vain 1 Mt muistia.

sisällysluettelo

Suora vaihto

Direct exchange - käytetään tarvittaessa toimittaa viestin tiettyihin jonoihin. Viesti julkaistaan ​​vaihtajalle tietyllä tiedolla reititysavain ja pääsee kaikkiin jonoihin, jotka liittyvät tähän vaihtimeen samankaltaisella reititysavaimella. Reititysavain on merkkijono. Vastaaminen tapahtuu käyttämällä merkkijonojen tasa-arvon tarkistaminen.

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

В rabbitmq on käsite oletusvaihdin. Se direct exchange ei nimeä. Jos käytetään oletusvaihdinta, viesti reititetään jonoon, jonka nimi on yhtä suuri kuin viestin reititysavain.

Aihevaihto

Topic exchange - samanlainen direct exchange mahdollistaa valikoivan reitityksen vertaamalla reititysavainta. Mutta tässä tapauksessa avain on annettu mallin mukaan. Kun luot mallia, käytä 0 tai useampia sanoja (kirjaimia AZ и az ja numerot 0-9), erotettuna pisteellä sekä symboleilla * и #.

  • * - voidaan korvata täsmälleen 1 слово
  • # - voidaan korvata 0 tai enemmän sanoja

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Versiosta alkaen RabbitMQ 2.4.0 reititysalgoritmi topic exchange alkoi työskennellä asti 145 kertaa nopeammin. He saavuttivat tämän toteuttamalla lähestymistapaa kokeile toteutusta, mikä tarkoittaa mallien esittämistä puurakenteena. Esimerkiksi malleja a.b.c, a.*.b.c, a.#.c и b.b.c edustaa seuraava rakenne:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Kuvioiden yhteensopivuus etsitään alkaen juuresta ylhäältä alas.

Ominaisuudet:

  • tämän vaihtimen käyttö voi tulla hyvä valinta mahdollista tulevaa sovelluskehitystä varten, koska malleja voidaan aina muokata niin, että viesti julkaistaan ​​samalla tavalla direct exchange tai fanout exchange
  • käyttäviä malleja * paljon nopeampikuin käytetyt mallit #.
  • topic exchange hitaammin direct exchange

Fanout Exchange

Fanout exchange - kaikki viestit toimitetaan kaikkiin jonoihin vaikka viestissä olisi määritetty reititysavain.

Ominaisuudet:

  • RabbitMQ ei toimi reititysavainten ja mallien kanssa jolla on positiivinen vaikutus suorituskykyyn. Tämä on nopein exchange;
  • kaikkien kuluttajien on voitava käsitellä kaikki viestit;

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Otsikoiden vaihto

Headers exchange - ohjaa viestit toisiinsa liittyviin jonoihin perustuen (avain, arvo) ominaisuusparien vertailuun headers sitova ja vastaava viestin ominaisuus. headers on a Dictionary<ключ, значение>.

Jos lisäät erikoisavaimen sanakirjaan x-match arvoilla any, niin viesti reititetään, jos parit (avain, arvo) täsmäävät osittain. Tämä käyttäytyminen on samanlainen kuin operaattori or.

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

Oletusavain x-match sisältää arvon all. Tämä tarkoittaa, että viesti reititetään, kun parit (avain, arvo) täsmäävät täysin. Tämä käyttäytyminen on samanlainen kuin operaattori and.

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Ominaisuudet:

  • lisää joustavuutta
  • ylimääräisiä laskennallisia kustannuksia. Kaikki attribuutin parit (avain, arvo). headers on lajiteltava avaimen nimen mukaan ennen viestin reititysarvojen laskemista. Hitaampi kuin muut vaihtotyypit.

Johdonmukainen hajautusvaihto

Tämä vaihdin on kytkeä и ei sisäänrakennettu в RabbitMQ.

Consistent-hashing exchange (hash-consistent exchange) - käytetään, kun viestin mahdollisia vastaanottajia on useita jonoja ja kun sinun on tasapainotettava niiden välinen kuormitus. Viesti liitetään jonoon painon mukaan (ehdollinen merkkijonoarvo alkaen 0 - n).

Jonojen vastaava paino - osoittaa, että jokainen jono vastaanottaa suunnilleen sama määrä viestit (jokainen viesti laitetaan vain yhteen jonoon). Ei ole täydellistä takuuta viestien yhtenäisestä jakelusta.

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Hash lasketaan reititysavaimen tai ominaisuuden perusteella headers viestejä. Jos kaikilla julkaistuilla viesteillä oli eri reititysavaimet, tai headers, silloin jakautuminen tapahtuu painon mukaan. Muussa tapauksessa käytetään reititysavainta tai headers.

Pitäisi auttaa, kun kuluttajan suorituskyvyn täytyy kasvaa korkeammalle kuin ratkaisu, jossa useita kuluttajia käyttää samaa jonoa.

Vaihtimen yhdistelmä (E2E)

Kaikkien vaihtimien käyttäytymistä voidaan yhdistää tiedonsiirron avulla Vaihto vaihtoon (vaihdinten yhdistelmä ei sisälly erittelyyn AMQP. Tämä on protokollalaajennus sivulta RabbitMQ).

Graafinen esitys viestikulusta:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Kustannuksella E2E voimme löytää oikean skaalautuvan kokoonpanon, joka täyttää sekä nykyiset että kasvavat vaatimukset.

Luo Exchange

Vaihdin luodaan synkronisella RPC pyyntö palvelimelle. Pyyntö tehdään menetelmällä Exchange.Declare, kutsutaan parametreilla:

  • vaihtajan nimi
  • vaihtimen tyyppi
  • muita vaihtoehtoja

Esimerkki luomisesta exchange keinoin RabbitMQ.Client:

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

  • exchange - sen vaihtimen nimi, jonka haluamme luoda. Nimen on oltava yksilöllinen
  • type - vaihtimen tyyppi
  • durable - jos asennettu true, Sitten exchange tulee olemaan pysyvä. Se tallennetaan levylle ja kestää palvelimen/välittäjän uudelleenkäynnistyksen. Jos arvo false, Sitten exchange on väliaikainen ja poistetaan, kun palvelin/välittäjä käynnistetään uudelleen
  • autoDelete - automaattinen poisto. Exchange poistetaan, kun kaikki siihen liittyvät jonot poistetaan
  • arguments ovat valinnaisia ​​argumentteja. Useimmiten asetettujen argumenttien kautta alternative exchange (vaihtoehtoinen vaihdin). Jos viesti ei voi kulkea alkuperäistä reittiä pitkin, se voidaan lähettää vaihtoehtoiseen keskukseen reititettäväksi eri polkua pitkin.

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Jos luominen exchange ehkä, palvelin lähettää asiakkaalle synkronisen RPC vastata Exchange.DeclareOk. Jos luominen on mahdotonta (pyyntö hylättiin Exchange.Declare) sitten kanava sulkeutuu palvelin käyttää asynkronista komentoa Channel.Close ja asiakas saa poikkeuksen Operation InterruptedException, joka sisältää virhekoodin ja sen kuvauksen.

Vaihdin on luotava ennen lähettämistä. Jos julkaiset viestin jollekin olemattomalle vaihtajalle - RabbitMQ poista se hiljaa.

Luo Exchange GUI

Siirry hallintapaneeliin RabbitMQ käyttäjän alla guest (käyttäjätunnus: guest ja salasana: guest). Huomaa, että käyttäjä guest voi muodostaa yhteyden vain localhostista. Siirrytään nyt välilehteen Exchanges ja klikkaa Add a new exchange. Täytä ominaisuudet:

RabbitMQ. Osa 2. Vaihdon ymmärtäminen

Suurin osa ominaisuuksista on kuvattu edellä. Tässä huomautamme, että jos asetamme Internal, vaihtoa voidaan käyttää vain E2E. Producer ei voi lähettää viestejä tällaiseen vaihtoon.

Johtopäätös

Järjestelmää kehitettäessä on kätevää kuvata topologia reititys käyttämällä kaaviota. Mutta ennen kuin aloitat kaavion rakentamisen, kannattaa korostaa polkuja, joilla on paljon liikennettä, koska. he vaativat korkeampi suorituskyky (esitys). Seuraavaksi voit luokitella liikenteen. Ja sitten alkaa rakentaa.

Jos rakennetussa graafissa on olemassa rajallinen joukko reititysavaimia, kannattaa katsoa useampaan suuntaan fanout exchange, jotka liittyvät 1:1 reititysavaimeen. Muista se fanout exchange nopein.

Jos reittien määrä taipumus äärettömyyteen, siihen kannattaa kiinnittää huomiota topic exchange tai jos mallia ei tarvita, voit valita direct exchnge, koska hän on nopeampi topic exchange.

Yhdistelmät erilaisista exchange pitäisi auttaa sinua löytämään oikean. skaalautuva kokoonpano, joka täyttää sekä nykyiset että kasvavat järjestelmävaatimukset.

Määrä exchange ja jonojen tulee olla minimaalisia verrattuna reittien määrään.

Seuraavassa artikkelissa alamme ymmärtää enemmän jonoista ja sidoksista.

viittaukset

Lähde: will.com

Lisää kommentti