Johdanto RabbitMQ-välittäjään, joka käsittelee viestejä

Johdanto RabbitMQ: een, viestivälittäjään, AMQP-malliin ja muuhun.

Hajautetuissa järjestelmissä eri sovellusten välisellä viestinnällä on tärkeä rooli. Viestien tehokas välittäminen sovellusten välillä oli aina ratkaiseva ratkaisu järjestelmän suunnittelussa. Yksi tyylikkäistä ratkaisuista viestien välittämiseen hajautetun järjestelmän ympärille on viestien välittäjä.

Hajautetuissa järjestelmissä eri sovellusten välisellä viestinnällä on tärkeä rooli. Viestien tehokas välittäminen sovellusten välillä oli aina ratkaiseva ratkaisu järjestelmän suunnittelussa. Yksi tyylikkäistä ratkaisuista viestien välittämiseen hajautetun järjestelmän ympärille on viestien välittäjä.

Ne tuovat erillään sovellusten välisen yhteyden ja tarjoavat tehokkaan tavan kommunikoida. Viestivälittäjien kanssa sovellus ei tarvitse etukäteen tietoa vastaanottajistaan ​​kommunikoida.

Mikä on kuitenkin RabbtiMQ? Kuinka RabbitMQ sopii tähän kuvaan? Mikä on myös AMQP?

Tämän artikkelin lopussa voimme vastata näihin kysymyksiin. Lisäsin myös muutaman animaation, jotta voit visualisoida RabbitMQ-käsitteitä.

Joten oletko innoissaan? Olen! Jos sinulla on koskaan ollut vaikeuksia ymmärtää viestin välittäjiä, kuten minäkin, tämä artikkeli on oikea paikka aloittaa matkasi. Pysy kanssani ?

Viestinvälittäjä

Välittäjä on yleensä henkilö, joka helpottaa kauppaa ostajan ja myyjän välillä. Esimerkki voi olla kiinteistönvälittäjä tai osakevälittäjä.

Vastaavasti, jos haluamme vaihtaa viestejä kahden jaetun ohjelmistokomponentin välillä, tarvitsemme välittäjän. Tämä välittäjä tunnetaan sananvälittäjänä. Se vastaanottaa saapuvat viestit lähettäjältä ja lähettää ne vastaanottajalle. Tällä tavalla lähettäjä ja vastaanottaja voidaan eristää täysin.

Toinen analogia viestivälittäjälle voi olla posti (katso kuva 1). Otetaan skenaario, jossa aiot lähettää kirjeen serkkusi, joka asuu toisessa kaupungissa. Tämän analogian mukaan olet tuottaja, serkkusi on kuluttaja ja posti on viestinvälittäjä.

RabbitMQ viestinvälittäjänä

Nyt tiedämme, että viestinvälittäjän tarkoituksena on ohjata viestit tuottajalta kuluttajalle. Tarkastellaan yhtä tällaista viestinvälittäjää - RabbitMQ. Se on yksi eniten käytettyjen viestien välittäjistä näinä päivinä.

Tapa, jolla RabbitMQ reitittää viestit, riippuu sen käyttämästä viestintäprotokollasta. RabbitMQ tukee useita viestiprotokollia. Olemme kuitenkin kiinnostuneita AMQP: stä. Se on lyhenne sanoista Advanced Message Queuing Protocol.

Tarkastellaan siis tarkemmin AMQP-protokollamallia ilman mitään jatkotoimia.

Advanced Message Queuing Protocol

AMQP: n käsitteellinen malli on melko yksinkertainen ja suoraviivainen. Sillä on kolme kokonaisuutta:

  1. Jonottaa
  2. Sitova
  3. Vaihto

Kun julkaisija työntää viestin RabbitMQ: lle, se saapuu ensin vaihtoon. Keskus jakaa sitten kopiot näistä viesteistä eri tavoin yhdistettyihin jonoihin. Lopuksi kuluttajat saavat nämä viestit.

Tarkastellaan viestiä datana. Se on välttämättä paketti, jolla on hyötykuorma ja joitain metadataa. Hyötykuorma sisältää täydelliset tiedot, kun taas metadata on ominaisuuksia, joita RabbitMQ käyttää.

Kuva 2 kuvaa graafisen esityksen AMQP-mallista.

AMQP on ohjelmoitava protokolla. Ohjelmoijilla on oikeus käyttää kirjastoja yksiköiden (vaihto, sidonta ja jono) määrittämiseen omien tarpeidensa mukaan. RabbitMQ-järjestelmänvalvojalla ei ole roolia näiden entiteettien määrittämisessä.

RabbitMQ: n kanssa on käytettävissä paljon kirjastoja. Voit valita seuraavista: Nodejs, Python, .Net, Java ja monet muut.

Jonot

Nämä jonot ovat jotenkin samanlaisia ​​kuin tietorakenneluokkien jonot. RabbitMQ-jonot noudattavat myös FIFO - First-In-First-Out -menetelmää. Jono on paikka, johon RabbitMQ tallentaa viestejä / tietoja.

Ohjelmoijat voivat määrittää jonot käytettävissä olevien ohjelmointikirjastojen kautta. Voit tehdä jonosta kestävän ( Durabilitykiinteistön kanssa) tietojesi suojaamiseksi siltä varalta, että välittäjä kaatuu. Voit myös antaa Namejonolle nimen ( kiinteistön kanssa). Muut kuin Nameja Durability, jono on muutamia muita ominaisuuksia, kuten automaattinen poisto, yksin, ja argumentit.

Ennen kuin siirryt eteenpäin, on tärkeää ymmärtää, kuka on näiden jonojen suora kuluttaja. Kuinka monella tavalla käyttäjä voi kuluttaa viestejä jonosta?

Kuluttajat

Kuluttajat käyttävät jonoon tallennettuja viestejä. Jonoon voi yhdistää useamman kuin yhden kuluttajan kerrallaan. Kuluttajat voivat joko vetää viestin jonosta yhdistämällä sen tai jonot voivat jopa työntää viestin eri yhteydenpitokuluttajille.

Sidokset

Sitominen on sääntö, jonka jono määrittelee muodostaessaan yhteyden vaihtoon. Sinulla voi olla jono yhdistettynä useisiin keskuksiin. Jokainen jono on myös kytketty oletuskeskukseen. Vaihto käyttää näitä sidoksia reittien viesteihin jonoihin.

Pörssit ja niiden tyypit

Exchange on yhdyskäytävä RabbitMQ: lle viesteihisi. Etäisyys, jonka viestin on kuljettava RabbitMQ: n sisällä, riippuu vaihdon tyypistä. Ensisijaisesti on neljä tyyppiä.

  • Suoraan
  • Fanout
  • Aihe
  • Otsikko

Suoraan

Nimi selittää kaiken! - Suora vaihto toimittaa viestin suoraan jonoihin, jotka täyttävät alla olevan ehdon:

Routing key == Binding key 

Reititysavain on viestin attribuutti. Toisaalta sitova avain on jotain, jonka määrität luodessasi sidoksen jonon ja vaihdon välille.

Kuva 3 on visuaalinen selitys siitä, kuinka viestit kulkevat suoraa vaihtoa käytettäessä.

Viesti on peräisin tuottajalta (vihreä ympyrä), jolla on reititysavain - img.resize. Kun se saavuttaa pörssin (oranssi ympyrä), pörssi yrittää löytää kaikki jonot sitovalla avaimella - img.resize. Jos kyseessä on osuma, viesti työnnetään kaikkiin vastaaviin jonoihin (kokoa meidän tapauksessamme). Jos vastaavuutta ei löydy, viesti voidaan lähettää takaisin tuottajalle tai se voidaan jopa hylätä. Olemme onnekkaita, että löysimme vastauksen esimerkistämme?

[gif-kuva]

Kun viesti saavuttaa halutun jonon (kokoa meidän tapauksessamme), se jaetaan pyöreällä tavalla kaikille liitetyille kuluttajille (resizer.1 / resizer.2 meidän tapauksessamme).

Jakamalla viestejä pyöreällä tavalla RabbitMQ varmistaa, että viestit ovat tasapainossa.

Olet varmaan huomannut, että crop- jono ei saa viestejä. Koska tämän esimerkin reititysavain on img.resize. Jos haluat lähettää viestejä tähän jonoon, meidän on lähetettävä viestejä reititysavaimella, joka vastaa sitovaa avainta (sanotaan img.crop esimerkiksi).

Fanout

Fanout-vaihto ohittaa reititysavaimet ja jakaa viestin kaikille yhdistetyille jonoille. Ei ihme, että sitä kutsutaan Fanoutiksi (puhaltaa viestejä kaikkiin kytkettyihin jonoihin!?).

Yksi tämäntyyppisen vaihdon käyttötapauksista on sanoman lähetys.

Huomaa, että RabbitMQ tekee silti edestakaisen robiinin, jos jonossa on enemmän kuin yksi kuluttaja.

Aihe

Aiheenvaihto reitittää viestin sovittamalla reititysavaimen sidontavaimen malliin.

Routing key == Pattern in binding key.

RabbitMQ käyttää kahta jokerimerkkiä kuvioiden sovittamiseen *ja #. Käytä a *vastaamaan 1 sanaa ja a #vastaamaan 0 tai useampaa sanaa.

Kuva 5 on visuaalinen kuvaus aiheenvaihdosta. Viestit, joissa on reititysavain - logs.errorvastaavat malleja - logs.errorja logs.*. Siksi nämä viestit päätyvät jonoihin - only error ja all logs.

Vasemmassa alakulmassa olevan tuottajan kohdalla reititysavaimella varustetut viestit logs.successvastaavat sitovan avaimen #success ja logs.*. Siksi nämä viestit päätyvät jonoihin - all logsja only success.

[gif]

Tämäntyyppisellä vaihdolla on laaja valikoima käyttötapauksia. Sitä voidaan käyttää julkaisu-tilaus -mallissa, jakamalla asiaankuuluvia tietoja haluaville työntekijöiden prosesseille ja paljon muuta.

Otsikko

Otsikko on tietyntyyppinen vaihto, joka reitittää viestit viestin otsikossa olevien avainten perusteella. Se unohtaa viestin reititysavaimen määritteen.

Kun luot sidoksia otsikkovaihtoon, on mahdollista sitoa jono vastaamaan useampaa kuin yhtä otsikkoa. Tällöin RabbitMQ: n tulisi tietää tuottajalta, vastaako se kaikkia tai kaikkia näitä avaimia.

Tuottaja / sovellus voi tehdä tämän tarjoamalla ylimääräisen lipun nimeltä x-match. 'x-matchilla' voi olla anytai allarvoja. Ensimmäisessä vaaditaan, että vain yhden arvon tulisi vastata toista, kun taas jälkimmäisessä vaaditaan, että kaikkien on vastattava toisiaan.

Viestin kuittaus

Kun viesti on saapunut määränpäähän, välittäjän tulisi poistaa viesti jonosta. Se on välttämätöntä, koska jonon ylivuoto voi tapahtua, jos se kerää jatkuvasti viestejä.

Ennen viestin poistamista välittäjällä on oltava toimitusvahvistus. On kaksi mahdollista tapaa vahvistaa viesti.

  1. Automaattinen kuittaus: Kun kuluttaja on vastaanottanut viestin
  2. Selkeä kuittaus: Kun kuluttaja lähettää takaisin kuittauksen

Useimmissa tapauksissa käytetään nimenomaista kuittausta, koska se varmistaa, että kuluttaja on käyttänyt viestiä ilman vikaa.

Mitä seuraavaksi

RabbitMQ on erittäin kypsä ja hyödyllinen tuote. Tämä artikkeli on vain korkean tason esittely RabbitMQ: lle. Yksinkertaistin käsitteitä tarjotakseni lähtökohdan eteenpäin siirtymiselle. Käy RabbitMQ-verkkosivustolla monimutkaisempien aiheiden löytämiseksi.

Toivottavasti pidät artikkelista. Älä unohda taputtaa (tai taputtaa?). Seuraa lukeaksesi tulevat tarinani. Jatka jonottamista seuraavaan kertaan asti.