RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Tere, Habr! Tahaksin jagada õpikut-teateid teadmistest, mis mul on õnnestunud koguda. RabbitMQ ja kokku võtta 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 vahetada suvalisi sõnumeid AMQP vahendaja kaudu, mis tegeleb marsruutimisega, võib-olla garanteerib kohaletoimetamise, jaotab andmevooge ja tellib teatud tüüpi sõnumeid.

Protokoll AMQP tutvustab kolme kontseptsiooni:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

  • exchange (vahetuspunkt või vahetus) - sinna saadetakse sõnumeid. 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) on kettal või muutmälus olev andmestruktuur, mis salvestab lingid sõnumitele ja tagastab sõnumite koopiad consumers (tarbijatele)
  • binding (siduv) - reegel, mis ütleb vahetuspunktile, millisesse järjekorda need sõnumid peaksid minema

Protokoll töötab peal TCP / IP.

Lühidalt Erlangist

Projekti lähtekood asub repositooriumis aadressil GitHubArhitektuur RabbitMQ-server põhineb erlang ja BEAM.

Erlang ettevõtte poolt välja töötatud Ericsson 1980. aastate keskel hajutatud, rikketaluva reaalajas süsteemina rakenduste jaoks, mis vajasid 99,999% käideolekuaega. Erlang kasutatakse erinevates tööstusharudes ja kaasaegsetes rakendustes, näiteks WhatsAppArtiklist saad lähemalt lugeda. WhatsAppi arhitektuur, mille Facebook ostis 19 miljardi dollari eest

Lühidalt RabbitMQ kohta

JänesMQ on avatud lähtekoodiga sõnumivahendaja. See suunab sõnumeid vastavalt kõigile põhilistele protokolli põhimõtetele. AMQP kirjeldatud spetsifikatsioonid. RabbitMQ rakendab ja täiendab protokolli AMQP.

Sõnumimudeli põhiidee RabbitMQ kas see on producer (Väljaandja) ei saada sõnumeid otse järjekorda. Tegelikult ja üsna sageli ei tea väljaandja isegi seda, kas sõnum üldse mõnda järjekorda toimetatakse.

Selle asemel saab kirjastaja sõnumeid saata ainult vahetuspunkti. Vahetuspunkt võtab kirjastajatelt sõnumeid vastu ja saadab need järjekordadesse. Vahetuspunkt peab täpselt teadma, mida vastuvõetud sõnumiga peale hakata. Kas see tuleks lisada konkreetsesse järjekorda? Kas see tuleks lisada mitmesse järjekorda? Või tuleks sõnum ignoreerida.

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Lühidalt töö kohta RabbitMQ saab kirjeldada järgmiselt:

  1. Väljaandja saadab sõnumi kindlale börsile
  2. Sõnumi vastuvõtmisel suunab andmevahetus selle ühte või mitmesse järjekorda vastavalt enda ja järjekorra vahelistele sidumisreeglitele.
  3. Järjekord salvestab viite sellele sõnumile. Sõnum ise salvestatakse RAM-mällu või kettale.
  4. Kui tarbija on järjekorrast sõnumi vastuvõtmiseks valmis, loob server viite abil sõnumist koopia ja saadab selle edasi.
  5. Tarbija saab teate ja saadab maaklerile kinnituse
  6. Pärast kinnituse saamist eemaldab maakler sõnumi koopia järjekorrast. Seejärel kustutab see selle RAM-ist ja kettalt.

RPC

protsess RPC (kaugprotseduurikutse) on aluseks praktiliselt kõigile tuumaga toimuvatele interaktsioonidele RabbitMQNäiteks kliendi tingimuste esialgsed arutelud RabbitMQ, demonstreerib teatud protsessi RPCKui see jada on lõpule viidud, RabbitMQ on valmis kliendi päringuid vastu võtma:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

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

Ühendus ja kanalid

Sellise teabevahetuse jaoks kliendi ja serveri vahel kasutatakse järgmist: kanalidKanalid luuakse sees konkreetne ühendusIga kanal on teistest kanalitest isoleeritud. Sünkroonsel juhul ei ole järgmise käsu täitmine võimalik enne vastuse saamist.

Käskude paralleelseks saatmiseks tuleb avada mitu kanalit. Iga kanal loob eraldi Erlang protsess. Ü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 juhtimiseks.

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 
}

Iga toimingu jaoks uue ühenduse avamist tungivalt ei soovitata, kuna see toob kaasa kõrgeid kulusidKanalid peaksid samuti olema püsivad, kuid paljud protokollivead põhjustavad kanali sulgemise, mistõttu kanali eluiga võib olla lühem kui ühenduse oma.

Kus RabbitMQ-d kasutatakse?

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

Kontekstis IIOT protokoll AMQP ja selle rakendamine RabbitMQ kasutatakse serveritevaheliseks andmevahetuseks (serveritevaheline). Samuti kasutavad nad pistikprogrammi. MQTT plugin RabbitMQ mis on protokolli implementatsioon MQTT andmete edastamiseks anduri ja serveri vahel madala kiiruse ja suure latentsusega keskkondades (toetatud protokollide täielik loetelu on loetletud aadressil projekti veebisait).

Järgmises artiklis hakkame Exchange'e üksikasjalikumalt uurima.

Viited

Allikas: www.habr.com

Lisa kommentaar