RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

Tere, Habr! Soovin jagada õpik-viidatud teadmisi, mida õnnestus mul koguda RabbitMQ ja koondada lühikesteks soovitusteks ja järeldusteks.

Sisukord

  • RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC
  • RabbitMQ. Osa 2. Uurime välja Exchanges
  • RabbitMQ. Osa 3. Uurime Queue-sid ja Bindings-e
  • RabbitMQ. Osa 4. Selgitame, mis on sõnumid ja raamid
  • RabbitMQ. Osa 5. Sõnumite publikatsiooni ja tarbimise tõhusus
  • RabbitMQ. Osa 6. Ülevaade modulaarsete Federation ja Shovel
  • RabbitMQ. Osa 7. Üksikasjalik teave Connection ja Chaneli kohta
  • RabbitMQ. Osa 8. RabbitMQ .NET-is
  • RabbitMQ. Osa 9. Jälgimine

Lühidalt AMQP-st

AMQP (Advanced Message Queuing Protocol) – avatud protokoll, mis on mõeldud sõnumite edastamiseks süsteemi komponentide vahel. Peamine idee seisneb selles, et eraldi alamsüsteemid (või iseseisvad rakendused) saavad vahetada sõnumeid mis tahes viisil AMQP-brokeri kaudu, mis teostab marsruutimist, võimalusel tagab kohaletoimetamise, jagab andmevooge ning tellib vajalikud sõnumitüübid.

Protokoll AMQP tutvustab kolme mõistet:

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

  • vahetus (vahetuspunkt või vahetus) – siia saadetakse sõnumid. Vahetuspunkt jagab sõnumi ühe või mitme järjekorra vahel. See marsruutitab sõnumid järjekorda sõltuvalt loodud sidemetest (binding) nende ja järjekorra vahel
  • queue (järjekord) – andmestruktuur kettal või mälus, mis hoiab viiteid sõnumitele ja annab edasi sõnumite koopiaid tarbijatele (tarbijatele)
  • binding (sidumine) – reegel, mis teavitab vahetuspunkti, millisesse järjekorda need sõnumid peaksid minema

Protokoll töötab peal TCP/IP.

Lühidalt Erlangist

Projekti lähtekood asub hoidlates GitHub. Arhitektuur RabbitMQ-server on põhinenud Erlang ja BEAM.

Erlang on välja töötanud ettevõte Ericsson 1980ndate keskpaiku ja see on jaotatud, talitlushäireteta, reaalajas süsteem rakenduste jaoks, mis nõuavad 99,999% usaldusväärsust. Erlang rakendatakse mitmesugustes valdkondades ja kaasaegsetes rakendustes, näiteks WhatsApp. Lisainfot võib lugeda artiklist WhatsAppi arhitektuurist, mille Facebook ostis 19 miljardi dollari eest

Lühidalt RabbitMQ-st

RabbitMQ – see on avatud lähtekoodiga sõnumite broker. See marsruutitab sõnumeid vastavalt protokolli kõigile põhialustele, AMQP mis on kirjeldatud spetsiifikatsioon. RabbitMQ rakendab ja täiustab protokolli AMQP.

Peamine idee sõnumite vahetusmudelis RabbitMQ on see, et tootja ei saada sõnumeid otse järjekorda. Tegelikult ei tea ja üsna sageli ei tea tootja üldse, kas sõnum jõuab mingi järjekorda.

Käitleja saab saata sõnumeid ainult vahetusele. Ühest küljest vahetus saab sõnumeid käitlejatelt, teisest küljest saadab need järjekordadesse. Vahetus peab täpselt teadma, mida teha saadud sõnumiga. Kas see peaks olema lisatud kindlasse järjekorda? Kas see peaks olema lisatud mitmesse järjekorda? Või tuleks sõnum ignoreerida.

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

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

  1. Vahetus, saades sõnumi, suunab selle ühte või mitmesse järjekorda vastavalt vaheduse ja järjekorra vahelistele sidumissätetele
  2. Järjekord hoiab selle sõnumi viidet. Ise sõnum hoitakse mälu või ketta peal
  3. Niipea kui tarbija on valmis saama sõnumit järjekorrast, loob server sõnumist viidatud koopia ja saadab selle
  4. Tarbija saab sõnumi ja saadab maaklerile kinnituse
  5. Maakler, saades kinnituse, eemaldab sõnumi koopia järjekorrast. Siis eemaldab selle mälu ja ketta pealt
  6. RPC (kaugprotseduurikõne)

RPC

Protsess on aluseks praktiliselt kõikidele interaktsioonidele tuumaga . Näiteks, esimene arutelu kliendi tingimustega RabbitMQ, näitab teatud protsessi RabbitMQ. Niipea kui see järjekord on lõpule viidud, RPCon süsteem valmis kliendi päringute vastuvõtmiseks: RabbitMQ Samuti täpsustuses

RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP

saavad nii klient kui server käivitada käske. See tähendab, et klient ootab serveriga suhtlemist. Käsud on klassid ja meetodid. Näiteks, AMQP Connection.Start – meetodi kutse Ühendus ja kanalid Alusta klassist Ühendus.

Kasutatakse teabe vahetamiseks kliendi ja serveri vahel

kanalite kaudu . Kanalid luuakse teatud ühenduse raames. Iga kanal on teistest kanalitest isoleeritud. Sünkroonses variandis ei saa järgmist käsku täita, kuni vastust pole saadud. Kuna käske peab olema võimalik saata paralleelselt, tuleb avada mitu kanalit. Iga kanal loob eraldiprotsessi. Üks ühendus võib omada mitmeid kanaleid (

multiplexing Erlang ). Iga kanali jaoks on mälu struktuurid ja objektid. Seetõttu, mida rohkem kanaleid ühenduse raames on, sedarohkem mälu kasutab RabbitMQselle ühenduse haldamiseks. Lihtne näide ühenduse ja kanali loomisest kasutades ü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 
}

Uue ühenduse avamine iga operatsiooni jaoks ei ole soovitatav, kuna see toob kaasa kõrged kulud. Kanalid peavad samuti olema pidevad, kuid paljud protokolli vead põhjustavad kanali sulgumist, seega võib kanali eluiga olla lühem kui ühenduse oma.

Kus kasutatakse RabbitMQ?

Mikroteenuste kontekstis, protokolli AMQP ja selle rakendust RabbitMQ kasutatakse sageli asünkroonseks suhtlemiseks teenuste vahel.

Kontekstis IIoT protokoll AMQP ja selle rakendust RabbitMQ kasutatakse andmete vahetamiseks serverite vahel (server-server). Samuti kasutatakse pistikut MQTT Plugin RabbitMQ mis on protokolli rakendus MQTT andmete edastamiseks anduri ja serveri vahel madala kiirusena ning kõrge latentsusega keskkondades (kõik toetatavad protokollid on loetletud projekti lehelt).

Järgmises artiklis hakkame sügavamalt tutvuma Exchanges'itega.

Viidatud lingid

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster