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:

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 vahelqueue(järjekord) — andmestruktuur ketas või mälu, mis salvestab viiteid sõnumitele ja annab sõnumite koopiadconsumers(tarbijatele)binding(sidumine) — reegel, mis teavitab vahetuspunkti, millisesse järjekorda need sõnumid peavad jõudma
Protokoll töötab TCP/IP peal. .
Lühidalt Erlangist
Projekti allikas asub hoidlas . Arhitektuur tugineb ja BEAM.
Erlangarendas ettevõteEricsson1980. aastate keskel, et luua hajutatud, rikete taluv süsteem reaalajas rakendustele, mis nõuavad 99,999% töökindlust.Erlangrakendatakse mitmesugustes valdkondades ja tänapäevastes rakendustes, näiteks
Lühidalt RabbitMQ-st
– see on avatud lähtekoodiga sõnumite vahetusteenus. See suunab sõnumeid kõigi protokolli põhialuste järgi mida on kirjeldatud . 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?

Tööd saab lühidalt kirjeldada järgmiselt: RabbitMQ Väljastaja saadab sõnumi kindlale vahetusele
- Vahetus, saades sõnumi, suunab selle ühte või mitmesse järjekorda vastavalt seotud reeglitele vahetuse ja järjekorra vahel
- Järjekord hoiab selle sõnumi viidet. Ise sõnum hoitakse kas mälus või kettal
- Niipea kui tarbija on valmis saama sõnumit järjekorrast, loob server viidatud sõnumist koopia ja saadab selle
- Tarbija saab sõnumi ja saadab vahendajale kinnituse
- Vahendaja, saamata kinnituse, kustutab sõnumi koopia järjekorrast. Siis kustutab selle mälust ja kettalt
- RPC (remote procedure call)
RPC
Protsess 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:

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

Lihtne näide ühenduse ja kanali loomisest abil :
// ...
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 mis on protokolli teostus andmete edastamiseks anduri ja serveri vahel madala kiirusestikeskkondades kõrge latentsusega (täielik toetatud protokollide nimekiri on loetletud) ).
Järgmisel artiklil hakkame süvitsi minema Exchanges'iga.
Lingid
Allikas: habr.com
