RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Tere, Habr! Tahtsin jagada õpik-käitiseri kaudu teadmisi, mida olen suutnud kokku koguda RabbitMQ ja kokku suruda lühikesteks soovitusteks ja järeldusteks.

Sisukord

  • RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC
  • RabbitMQ. Osa 2. Uurime Exchanges
  • RabbitMQ. Osa 3. Uurime Queues ja Bindings
  • RabbitMQ. Osa 4. Vaatame, mis on sõnumid ja raamid
  • RabbitMQ. Osa 5. Sõnumite avaldamise ja tarbimise jõudlus
  • RabbitMQ. Osa 6. Ülevaade moodulitest Federation ja Shovel
  • RabbitMQ. Osa 7. Üksikasjalikult Connection ja Channel
  • RabbitMQ. Osa 8. RabbitMQ .NET-is
  • RabbitMQ. Osa 9. Juhendamine

Lühidalt AMQP-st

AMQP (Advanced Message Queuing Protocol) on avatud protokoll sõnumite edastamiseks süsteemi komponentide vahel. Peamine idee on, et erinevad alamsüsteemid (või sõltumatud rakendused) saavad vahetada sõnumeid AMQP-vehikli kaudu, mis teostab marsruutimist, tagades võimalikku kohaletoimetamist, andmevoogude jaotamist ning tellimust vajalike sõnumitüüpide järgi.

Protokoll AMQP tutvustab kolme mõistet:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

  • exchange (vahetuspunkt või vahetus) — sinna saadetakse sõnumid. Vahetuspunkt jagab sõnumi ühe või mitme järjekorra. See suunab sõnumeid järjekorda loodud sidemete alusel (binding) selle ja järjekorra vahel
  • queue (järjekord) — andmestruktuur ketas või mälu, mis salvestab viiteid sõnumitele ja annab sõnumite koopiad consumers (tarbijatele)
  • binding (sidumine) — reegel, mis teavitab vahetuspunkti, millisesse järjekorda need sõnumid peavad jõudma

Protokoll töötab TCP/IP peal. Koodiprojekt asub hoidlas.

Lühidalt Erlangist

Projekti allikas asub hoidlas GitHub. Arhitektuur RabbitMQ-server tugineb Erlang ja BEAM.

Erlang arendas ettevõte Ericsson 1980. aastate keskel, et luua hajutatud, rikete taluv süsteem reaalajas rakendustele, mis nõuavad 99,999% töökindlust. Erlang rakendatakse mitmesugustes valdkondades ja tänapäevastes rakendustes, näiteks WhatsApp. Lisainfot võib lugeda artiklist WhatsApp arhitektuur, mille Facebook ostis 19 miljardi dollari eest

Lühidalt RabbitMQ-st

RabbitMQ – see on avatud lähtekoodiga sõnumite vahetusteenus. See suunab sõnumeid kõigi protokolli põhialuste järgi AMQP mida on kirjeldatud spetsifikatsioonis. RabbitMQ rakendab ja täiendab protokolli AMQP.

Peamine idee sõnumivahetusmudelis RabbitMQ on see, et producer (väljaandja) ei saada sõnumeid otse järjekorda. Tegelikult ei tea väljaandja tihti isegi, kas sõnum toimetatakse üldse mõnda järjekorda.

Käesolev juhul saadab väljastaja sõnumeid ainult vahetusse. Ühes suunas vahetus saab sõnumeid väljastajatelt, teises suunas saadab need järjekordadesse. Vahetus peab täpselt teadma, mida teha saadud sõnumiga. Kas see tuleks lisada kindlasse järjekorda? Kas see tuleks lisada mitmesse järjekorda? Või tuleks sõnum ignoreerida?

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Tööd saab lühidalt kirjeldada järgmiselt: RabbitMQ Väljastaja saadab sõnumi kindlale vahetusele

  1. Vahetus, saades sõnumi, suunab selle ühte või mitmesse järjekorda vastavalt seotud reeglitele vahetuse ja järjekorra vahel
  2. Järjekord hoiab selle sõnumi viidet. Ise sõnum hoitakse kas mälus või kettal
  3. Niipea kui tarbija on valmis saama sõnumit järjekorrast, loob server viidatud sõnumist koopia ja saadab selle
  4. Tarbija saab sõnumi ja saadab vahendajale kinnituse
  5. Vahendaja, saamata kinnituse, kustutab sõnumi koopia järjekorrast. Siis kustutab selle mälust ja kettalt
  6. RPC (remote procedure call)

RPC

Protsess on aluseks praktiliselt kõigile suhtlustele tuumas on aluseks praktiliselt kõigile suhtlusele südamikku RabbitMQ. Näiteks, kliendi tingimuste esialgsed arutelud, RabbitMQ, näitab teatud protsessi. RPC. Kui see järjestus on lõpetatud, RabbitMQ on valmis vastu võtma kliendi päringuid:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Samuti spetsifikatsioonis AMQP võivad nii klient kui server käivitada käske. See tähendab, et klient ootab serveriga suhtlemist. Käsud on klassid ja meetodid. Näiteks, Connection.Start – meetodi väljakutse. Alusta klass Ühendus.

Ühendamine ja kanalid

Selle teabevahetuse jaoks kliendi ja serveri vahel kasutatakse kanaleid.Kanalid luuakse raames teatud ühendust.Iga kanal on teistest kanalis isoleeritud. Sünkroonse juhtumi korral ei saa järgmist käsku täita, kuni vastust ei ole saadud.

Kuna soovitakse käskude saatmist paralleelselt, tuleb avada mitu kanalit. Iga kanal loob eraldi Erlang protsessi. Ühel ühendusel võib olla mitmeid kanaleid (multiplexing). Iga kanali jaoks on mälu struktuurid ja objektid. Seega, mida rohkem kanaleid on ühenduse raames, seda rohkem mälu kasutab RabbitMQ selle ühenduse haldamiseks.

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

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

Uue ühenduse avamine iga toimingu jaoks ei ole soovitatav, kuna see toob kaasa suured kulud. Kanalid peavad samuti olema püsivad, kuid paljud protokolli vead põhjustavad kanali sulgemise, seega võib kanali eluea pikkus olla lühem kui ühenduse.

Kus kasutatakse RabbitMQ-d?

Mikroteenuste kontekstis kasutatakse protokolli AMQP ja selle teostust RabbitMQ tihti asünkroonseks suhtlemiseks teenuste vahel.

Konteksti IIOT protokoll AMQP ja selle teostust RabbitMQ kasutatakse andmete vahetamiseks serverite vahel (server-server). Samuti kasutatakse pluginit MQTT Plugin RabbitMQ mis on protokolli teostus MQTT andmete edastamiseks anduri ja serveri vahel madala kiirusestikeskkondades kõrge latentsusega (täielik toetatud protokollide nimekiri on loetletud) projekti veebilehel).

Järgmisel artiklil hakkame süvitsi minema Exchanges'iga.

Lingid

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster