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:

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 vahelqueue(järjekord) on kettal või muutmälus olev andmestruktuur, mis salvestab lingid sõnumitele ja tagastab sõnumite koopiadconsumers(tarbijatele)binding(siduv) - reegel, mis ütleb vahetuspunktile, millisesse järjekorda need sõnumid peaksid minema
Protokoll töötab peal .
Lühidalt Erlangist
Projekti lähtekood asub repositooriumis aadressil Arhitektuur põhineb ja BEAM.
Erlangettevõtte poolt välja töötatudEricsson1980. aastate keskel hajutatud, rikketaluva reaalajas süsteemina rakenduste jaoks, mis vajasid 99,999% käideolekuaega.Erlangkasutatakse erinevates tööstusharudes ja kaasaegsetes rakendustes, näiteks
Lühidalt RabbitMQ kohta
on avatud lähtekoodiga sõnumivahendaja. See suunab sõnumeid vastavalt kõigile põhilistele protokolli põhimõtetele. kirjeldatud . 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.

Lühidalt töö kohta RabbitMQ saab kirjeldada järgmiselt:
- Väljaandja saadab sõnumi kindlale börsile
- Sõnumi vastuvõtmisel suunab andmevahetus selle ühte või mitmesse järjekorda vastavalt enda ja järjekorra vahelistele sidumisreeglitele.
- Järjekord salvestab viite sellele sõnumile. Sõnum ise salvestatakse RAM-mällu või kettale.
- Kui tarbija on järjekorrast sõnumi vastuvõtmiseks valmis, loob server viite abil sõnumist koopia ja saadab selle edasi.
- Tarbija saab teate ja saadab maaklerile kinnituse
- Pärast kinnituse saamist eemaldab maakler sõnumi koopia järjekorrast. Seejärel kustutab see selle RAM-ist ja kettalt.
RPC
protsess 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:

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 (). 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.

Lihtne näide ühenduse ja kanali loomisest, kasutades :
// ...
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. mis on protokolli implementatsioon andmete edastamiseks anduri ja serveri vahel madala kiiruse ja suure latentsusega keskkondades (toetatud protokollide täielik loetelu on loetletud aadressil ).
Järgmises artiklis hakkame Exchange'e üksikasjalikumalt uurima.
Viited
Allikas: www.habr.com
