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:

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 vahelqueue(järjekord) – andmestruktuur kettal või mälus, mis hoiab viiteid sõnumitele ja annab edasi sõnumite koopiaidtarbijatele(tarbijatele)binding(sidumine) – reegel, mis teavitab vahetuspunkti, millisesse järjekorda need sõnumid peaksid minema
Protokoll töötab peal .
Lühidalt Erlangist
Projekti lähtekood asub hoidlates . Arhitektuur on põhinenud ja BEAM.
Erlangon välja töötanud ettevõteEricsson1980ndate keskpaiku ja see on jaotatud, talitlushäireteta, reaalajas süsteem rakenduste jaoks, mis nõuavad 99,999% usaldusväärsust.Erlangrakendatakse mitmesugustes valdkondades ja kaasaegsetes rakendustes, näiteks
Lühidalt RabbitMQ-st
– see on avatud lähtekoodiga sõnumite broker. See marsruutitab sõnumeid vastavalt protokolli kõigile põhialustele, mis on kirjeldatud . 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.

Tööd saab lühidalt kirjeldada järgmiselt: RabbitMQ Käitleja saadab sõnumi kindlale vahetusele
- Vahetus, saades sõnumi, suunab selle ühte või mitmesse järjekorda vastavalt vaheduse ja järjekorra vahelistele sidumissätetele
- Järjekord hoiab selle sõnumi viidet. Ise sõnum hoitakse mälu või ketta peal
- Niipea kui tarbija on valmis saama sõnumit järjekorrast, loob server sõnumist viidatud koopia ja saadab selle
- Tarbija saab sõnumi ja saadab maaklerile kinnituse
- Maakler, saades kinnituse, eemaldab sõnumi koopia järjekorrast. Siis eemaldab selle mälu ja ketta pealt
- RPC (kaugprotseduurikõne)
RPC
Protsess . 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

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, sedaselle ühenduse haldamiseks. Lihtne näide ühenduse ja kanali loomisest kasutades ühenduse haldamiseks.

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
}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 mis on protokolli rakendus andmete edastamiseks anduri ja serveri vahel madala kiirusena ning kõrge latentsusega keskkondades (kõik toetatavad protokollid on loetletud ).
Järgmises artiklis hakkame sügavamalt tutvuma Exchanges'itega.
Viidatud lingid
Allikas: habr.com
