RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Tere pärastlõunast, Habr! Tahan jagada õpikut-teatmeraamatut, millele mul õnnestus koguda RabbitMQ ning koondada lühikesteks soovitusteks ja järeldusteks.

Sisukord

  • RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC
  • RabbitMQ. 2. osa. Vahetuste mõistmine
  • RabbitMQ. 3. osa. Järjekordade ja sidumiste mõistmine
  • RabbitMQ. 4. osa. Sõnumite ja raamide mõistmine
  • RabbitMQ. 5. osa: Sõnumite avaldamine ja tarbimine
  • RabbitMQ. Osa 6. Föderatsiooni ja kühvli moodulite ülevaade
  • RabbitMQ. 7. osa. Ühenduse ja Chaneli üksikasjad
  • RabbitMQ. 8. osa. RabbitMQ .NET-is
  • RabbitMQ. Osa 9. Seire

Lühidalt AMQP-st

AMQP (Advanced Message Queuing Protocol) on avatud protokoll sõnumite edastamiseks süsteemikomponentide vahel. Põhiidee seisneb selles, et üksikud alamsüsteemid (või sõltumatud rakendused) saavad suvalisel viisil sõnumeid vahetada AMQP maakleri kaudu, mis teostab marsruutimist, võib-olla tagab kohaletoimetamise, levitab andmevooge ja tellib soovitud sõnumitüübid.

Protokoll AMQP tutvustab kolme mõistet:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

  • exchange (vahetuspunkt või vahetus) - sellele saadetakse teated. Vahetuspunkt levitab sõnumit ühes või mitmes järjekorras. Ta suunab sõnumid järjekorda loodud linkide põhjal (binding) tema ja järjekorra vahel
  • queue (järjekord) - kettal või RAM-is olev andmestruktuur, mis salvestab sõnumite linke ja annab sõnumitest koopiaid consumers (tarbijatele)
  • binding (siduv) – reegel, mis annab vahetuspunktile teada, millisesse järjekorda need teated peaksid minema

Protokoll jookseb peal TCP / IP.

Lühidalt Erlangist

Projekti lähtekood asub hoidlas aadressil GitHub. Arhitektuur RabbitMQ-server põhineb erlang ja BEAM.

Erlang ettevõtte poolt välja töötatud Ericsson 1980. aastate keskel hajutatud, tõrketaluvusega reaalajas süsteemina rakendustele, mis nõuavad 99,999% tööaega. Erlang kasutatakse erinevates tööstusharudes ja kaasaegsetes rakendustes, nt. WhatsApp. Täpsemalt saate lugeda artiklist WhatsApp arhitektuur, mille Facebook ostis 19 miljardi dollari eest

Lühidalt RabbitMQ-st

JänesMQ on avatud lähtekoodiga sõnumite vahendaja. See suunab teated protokolli kõigi põhiprintsiipide järgi AMQP aastal kirjeldatud spetsifikatsioonid. RabbitMQ rakendab ja täiendab protokolli AMQP.

Sõnumimudeli peamine idee RabbitMQ asi on producer (väljaandja) ei saada sõnumeid otse järjekorda. Tegelikult ja üsna sageli ei tea väljaandja isegi, kas sõnum üldse mingisse järjekorda jõuab.

Selle asemel saab väljaandja vahetust ainult sõnumeid saata. Ühelt poolt võtab vahetus vastu sõnumeid kirjastajatelt ja teisest küljest saadab need järjekordadesse. Vahetus peab täpselt teadma, mida saadud sõnumiga teha. Kas see tuleks lisada konkreetsesse järjekorda? Kas see tuleks lisada mitmesse järjekorda? Või tuleks sõnumit ignoreerida.

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Lühike töö RabbitMQ võib kirjeldada järgmiselt:

  1. Väljaandja saadab sõnumi konkreetsele börsile
  2. Pärast sõnumi vastuvõtmist suunab vahetus selle ühte või mitmesse järjekorda vastavalt selle ja järjekorra vahel kehtivatele sidumisreeglitele
  3. Järjekord salvestab viite sellele sõnumile. Sõnum ise salvestatakse RAM-i või kettale
  4. Kui tarbija on valmis järjekorrast sõnumit vastu võtma, loob server lingi kaudu sõnumist koopia ja saadab
  5. Tarbija saab teate ja saadab maaklerile kinnituse
  6. Maakler eemaldab kinnituse saamisel kirja koopia järjekorrast. Seejärel kustutatakse RAM-i ja kettalt

RPC

protsess RPC (kaugprotseduuri kõne) on peaaegu kõigi tuumaga interaktsioonide aluseks RabbitMQ. Näiteks esmased arutelud kliendi tingimuste üle RabbitMQ, näitab teatud protsessi RPC. Kui see jada on lõppenud, RabbitMQ on valmis vastu võtma kliendi taotlusi:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Samuti spetsifikatsioonis AMQP nii klient kui ka server saavad anda käske. See tähendab, et klient ootab serveriga suhtlemist. Käsud on klassid ja meetodid. Näiteks, Connection.Start - meetodi kutse Start klass Connection.

Ühendus ja kanalid

Sellise teabevahetuse jaoks kliendi ja serveri vahel kanalid. Kanalid luuakse sees konkreetne ühendus. Iga kanal on teistest kanalitest isoleeritud. Sünkroonsel juhul ei ole võimalik järgmist käsku täita enne, kui vastus on laekunud.

Selleks, et käske saaks paralleelselt saata, tuleb avada mitu kanalit. Iga kanal loob eraldi Erlang protsessi. Ühel ühendusel võib olla mitu kanalit (multipleksimine). Iga kanali jaoks on mälus teatud struktuurid ja objektid. Seega, mida rohkem kanaleid ühenduses on, seda RabbitMQ kasutab rohkem mälu sellise ühenduse haldamiseks.

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Lihtne näide ühenduse ja kanali loomisest kasutades 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 
}

Seetõttu ei soovitata iga toimingu jaoks uut ühendust avada toob kaasa suuri kulusid. Kanalid peaksid samuti olema püsivad, kuid paljud protokolli vead põhjustavad kanali sulgemise, mistõttu võib kanali eluiga olla ühenduse omast lühem.

Kus RabbitMQ-d kasutatakse?

Mikroteenuste kontekstis protokoll AMQP ja selle rakendamine aastal RabbitMQ jaoks kasutatakse sageli asünkroonne interaktsioon teenuste vahel.

Kontekstis IIOT protokoll AMQP ja selle rakendamine aastal RabbitMQ kasutatakse andmevahetuseks serverite vahel (server-server). Kasutage ka pistikprogrammi MQTT plugin RabbitMQ mis on protokolli rakendus MQTT andmete edastamiseks anduri ja serveri vahel väikese kiirusega ja suure latentsusega keskkondades (täielik toetatud protokollide loend on loetletud aadressil projekti veebisait).

Järgmises artiklis hakkame vahetust üksikasjalikumalt mõistma.

Viited

Allikas: www.habr.com

Lisa kommentaar