RabbitMQ. Osa 1. Johdanto. Erlang, AMQP

Hyvää iltapäivää, Habr! Haluan jakaa oppikirja-tietokirjan, jonka olen onnistunut keräämään RabbitMQ ja tiivistää lyhyiksi suosituksiksi ja johtopäätöksiksi.

sisällysluettelo

  • RabbitMQ. Osa 1. Johdanto. Erlang, AMQP ja RPC
  • RabbitMQ. Osa 2. Vaihdon ymmärtäminen
  • RabbitMQ. Osa 3. Jonojen ja sidosten ymmärtäminen
  • RabbitMQ. Osa 4. Viestien ja kehysten ymmärtäminen
  • RabbitMQ. Osa 5: Viestien julkaisu ja kuluttaminen
  • RabbitMQ. Osa 6. Yleiskatsaus liittämiseen ja lapiomoduuliin
  • RabbitMQ. Osa 7. Tiedot Connectionista ja Chanelista
  • RabbitMQ. Osa 8. RabbitMQ .NET:ssä
  • RabbitMQ. Osa 9. Valvonta

Lyhyesti AMQP:stä

AMQP (Advanced Message Queuing Protocol) on avoin protokolla viestien välittämiseen järjestelmäkomponenttien välillä. Perusajatuksena on, että yksittäiset alijärjestelmät (tai itsenäiset sovellukset) voivat vaihtaa viestejä mielivaltaisella tavalla AMQP-välittäjän kautta, joka suorittaa reitityksen, mahdollisesti takaa toimituksen, jakaa tietovirtoja ja tilaa halutut viestityypit.

protokolla AMQP esittelee kolme käsitettä:

RabbitMQ. Osa 1. Johdanto. Erlang, AMQP

  • exchange (vaihtopiste tai vaihto) - siihen lähetetään viestejä. Vaihtopiste jakaa viestin yhdessä tai useammassa jonossa. Hän reitittää viestit jonoon luotujen linkkien perusteella (binding) hänen ja jonon välillä
  • queue (jono) - levyllä tai RAM-muistissa oleva tietorakenne tallentaa linkkejä viesteihin ja antaa kopioita viesteistä consumers (kuluttajille)
  • binding (sitova) - sääntö, joka kertoo vaihtopisteelle, mihin jonoon näiden viestien tulee mennä

Protokolla toimii ylhäällä TCP / IP.

Lyhyesti Erlangista

Projektin lähdekoodi on arkistossa osoitteessa GitHub. Arkkitehtuuri RabbitMQ-palvelin perustuen Erlang ja BEAM.

Erlang yrityksen kehittämä Ericsson 1980-luvun puolivälissä hajautettu, vikasietoinen, reaaliaikainen järjestelmä sovelluksille, jotka vaativat 99,999 % käyttöaikaa. Erlang käytetään eri teollisuudenaloilla ja nykyaikaisissa sovelluksissa, mm. WhatsApp. Voit lukea lisää artikkelista WhatsApp-arkkitehtuuri, jonka Facebook osti 19 miljardilla dollarilla

Lyhyesti RabbitMQ:sta

RabbitMQ on avoimen lähdekoodin viestivälittäjä. Se reitittää viestit protokollan kaikkia perusperiaatteita pitkin AMQP kuvattu kohdassa tekniset tiedot. RabbitMQ toteuttaa ja täydentää protokollaa AMQP.

Viestimallin pääidea sisään RabbitMQ asia on producer (julkaisija) ei lähetä viestejä suoraan jonoon. Itse asiassa, ja melko usein, julkaisija ei edes tiedä, toimitetaanko viesti ollenkaan mihinkään jonoon.

Sen sijaan julkaisija voi lähettää vain viestejä keskukselle. Toisaalta keskus vastaanottaa viestejä julkaisijoilta ja toisaalta lähettää ne jonoihin. Pörssin on tiedettävä tarkalleen, mitä tehdä vastaanottamansa viestin kanssa. Pitäisikö se lisätä tiettyyn jonoon? Pitäisikö se lisätä useisiin jonoihin? Tai viesti tulee jättää huomiotta.

RabbitMQ. Osa 1. Johdanto. Erlang, AMQP

Lyhyt työ RabbitMQ voidaan kuvata seuraavasti:

  1. Kustantaja lähettää viestin tiettyyn vaihtoon
  2. Vastaanotettuaan viestin keskus reitittää sen yhteen tai useampaan jonoon sen ja jonon välisten sitovien sääntöjen mukaisesti
  3. Jono tallentaa viittauksen tähän viestiin. Itse viesti on tallennettu RAM-muistiin tai levylle
  4. Kun kuluttaja on valmis vastaanottamaan viestin jonosta, palvelin luo viestistä kopion linkin kautta ja lähettää
  5. Kuluttaja vastaanottaa viestin ja lähettää vahvistuksen välittäjälle
  6. Välittäjä, saatuaan vahvistuksen, poistaa kopion viestistä jonosta. Poistaa sitten RAM-muistista ja levyltä

RPC

prosessi RPC (etämenettelykutsu) on lähes kaikkien vuorovaikutusten taustalla ytimen kanssa RabbitMQ. Esimerkiksi alustavia keskusteluja asiakkaan ehdoista RabbitMQ, osoittaa tietyn prosessin RPC. Kun tämä sarja on valmis, RabbitMQ on valmis ottamaan vastaan ​​asiakkaan pyyntöjä:

RabbitMQ. Osa 1. Johdanto. Erlang, AMQP

Myös erittelyssä AMQP sekä asiakas että palvelin voivat antaa komentoja. Tämä tarkoittaa, että asiakas odottaa yhteydenpitoa palvelimen kanssa. Komennot ovat luokkia ja menetelmiä. Esimerkiksi, Connection.Start - menetelmäkutsu Start luokka Connection.

Yhteys ja kanavat

Tällaista tiedonvaihtoa varten asiakkaan ja palvelimen välillä kanavia. Kanavat luodaan sisällä tietty yhteys. Jokainen kanava on eristetty muista kanavista. Synkronisessa tapauksessa ei ole mahdollista suorittaa seuraavaa komentoa ennen kuin vastaus on vastaanotettu.

Jotta voit lähettää komentoja rinnakkain, sinun on avattava useita kanavia. Jokainen kanava luo erillisen Erlang käsitellä asiaa. Yhdellä yhteydellä voi olla useita kanavia (multiplexing). Jokaiselle kanavalle on muistissa tiettyjä rakenteita ja objekteja. Siksi mitä enemmän kanavia yhteyden sisällä on, sitä RabbitMQ käyttää enemmän muistia hallita tällaista yhteyttä.

RabbitMQ. Osa 1. Johdanto. Erlang, AMQP

Yksinkertainen esimerkki yhteyden ja kanavan luomisesta käyttämällä RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

Uuden yhteyden avaamista jokaiselle toiminnolle ei suositella johtaa korkeisiin kustannuksiin. Kanavien tulee myös olla pysyviä, mutta monet protokollavirheet aiheuttavat kanavan sulkeutumisen, joten kanavan käyttöikä voi olla lyhyempi kuin yhteyden.

Missä RabbitMQ:ta käytetään?

Mikropalvelujen yhteydessä protokolla AMQP ja sen täytäntöönpano vuonna RabbitMQ käytetään usein asynkroninen vuorovaikutus palveluiden välillä.

Yhteydessä IIOT protokollaa AMQP ja sen täytäntöönpano vuonna RabbitMQ käytetään tiedonvaihtoon palvelimien välillä (palvelin-palvelin). Käytä myös laajennusta MQTT Plugin RabbitMQ joka on protokollan toteutus MQTT tiedon siirtämiseen anturin ja palvelimen välillä hitaissa, korkean viiveen ympäristöissä (täydellinen luettelo tuetuista protokollista on lueteltu osoitteessa projektisivusto).

Seuraavassa artikkelissa alamme ymmärtää vaihtoja yksityiskohtaisemmin.

viittaukset

Lähde: will.com

Lisää kommentti