Përshëndetje, Habr! Dëshiroj të ndaj një udhëzues-referencë me njohuritë që kam arritur të bëj RabbitMQ dhe të përmbledhë në rekomandime dhe përfundime të shkurtra.
Përmbajtja
- RabbitMQ. Pjesa 1. Introduction. Erlang, AMQP dhe RPC
- RabbitMQ. Pjesa 2. Të kuptojmë Exchanges
- RabbitMQ. Pjesa 3. Të kuptojmë Queues dhe Bindings
- RabbitMQ. Pjesa 4. Po studiojmë se çfarë janë mesazhet dhe kornizat
- RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumimit të mesazheve
- RabbitMQ. Pjesa 6. Pasqyrë e moduleve Federation dhe Shovel
- RabbitMQ. Pjesa 7. Në detaje për Connection dhe Chanel
- RabbitMQ. Pjesa 8. RabbitMQ në .NET
- RabbitMQ. Pjesa 9. Monitorimi
Shkurtimisht për AMQP
AMQP (Protokolli Avancuar i Radhitjes së Mesazheve) është një protokoll i hapur për transferimin e mesazheve mes komponentëve të sistemit. Ideja kryesore është që nën-sistemet e veçanta (ose aplikacionet e pavarura) mund të shkëmbejnë mesazhe në një mënyrë të rastësishme përmes brokerit AMQP, i cili realizon ruterimin, mundësisht garanton dorëzimin, shpërndarjen e flukseve të të dhënave, abonimin në llojet e nevojshme të mesazheve.
Protokolli AMQP introdukon tri nocione:

exchange(pikë exchange ose exchange) - në të dërgohen mesazhet. Pika exchange distribuon mesazhin dërgon mesazhe në një ose më shumë radhë. Ajo rute mesazhet në radhë në bazë të lidhjeve të krijuara (binding) midis saj dhe radhësqueue(rade) - një strukturë të dhënash në disk ose në memorien operative, e cila mban lidhjet me mesazhet dhe jep kopje të mesazheveconsumers(konsumatorëve)binding(prerja) - një rregull që njofton pikën e exchange se në cilën nga radhët këto mesazhe duhet të shkojnë
Protokolli punon sipër .
Shkurtimisht për Erlang
Kodi burimor i projektit ndodhet në repozitorin në . Arkitektura bazohet në dhe BEAM.
Erlangu zhvillua ngaEricssonnë mesin e viteve 1980 si një sistem i shpërndarë, i qëndrueshëm ndaj dështimeve, në kohë reale për aplikacione që kërkojnë disponueshmëri 99.999%.Erlangaplikohet në industri të ndryshme dhe aplikacione moderne, për shembull në
Shkurtimisht për RabbitMQ
është një broker mesazhesh me kod të hapur. Ai ruterizon mesazhet sipas të gjitha parimeve bazë të protokollit të përshkruara në . RabbitMQ implementon dhe plotëson protokollin. AMQP.
Ideja kryesore e modelit të shkëmbimit të mesazheve në RabbitMQ ka të bëjë me faktin se prodhuesi (botuesi) nuk dërgon mesazhet direkt në radhë. Në të vërtetë, shpeshherë botuesi madje nuk e di nëse mesazhi do të dorëzohet fare në ndonjë radhë.
Në vend të kësaj, botuesi mund të dërgojë mesazhe vetëm në këmbim. Në një anë, këmbimi merr mesazhe nga botuesit, ndërsa në anën tjetër i dërgon ato në radhë. Këmbimi duhet të dijë saktësisht se çfarë të bëjë me mesazhin e marrë. A duhet të shtohet në një radhë të caktuar? A duhet të shtohet në disa radhë? Ose mesazhi duhet të injorohet.

Përmbledhje e punës RabbitMQ mund të përshkruhet si më poshtë:
- Botuesi dërgon një mesazh në një këmbim të caktuar
- Këmbimi, duke marrë mesazhin, e drejton atë në një ose më shumë radhë në përputhje me rregullat e lidhjes mes tij dhe radhës.
- Radhë mbahet një lidhje me këtë mesazh. Mesazhi vetë ruhet në memorie ose në dysk.
- Sapo konsumatori është gati të marrë mesazhin nga radhë, serveri krijon një kopje të mesazhit përmes lidhjes dhe e dërgon.
- Konsumatori merr mesazhin dhe i dërgon brokerit një konfirmim.
- Brokeri, duke marrë konfirmimin, e heq kopjen e mesazhit nga radhë. Pastaj e heq nga memoria dhe nga disku.
RPC
Në ditën e fillimit të modulit, struktura e tij bëhet e disponueshme. Studimi në UoL përbëhet nga cikli në vijim: është në themel të praktikisht të gjitha interaksioneve me bërthamën. RabbitMQ. Për shembull, diskutimet fillestare mbi kushtet e klientit me RabbitMQ, tregon një proces të caktuar. RPC. Sapo kjo sekuencë të përfundojë, RabbitMQ do të jetë gati të pranojë kërkesa nga klienti:

Gjithashtu në specifikimin AMQP dhe klienti dhe serveri mund të bëjnë thirrje për komandat. Kjo do të thotë se klienti pret ndërveprimin me serverin. Komandat janë klasa dhe metoda. Për shembull, Connection.Start – thirrja e metodës. Nisni klasës Connection.
Lidhjet dhe kanalet
Për një këmbim të tillë informacioni midis klientit dhe serverit përdoren kanalet.. Kanalet krijohen brenda një lidhjeje të caktuar.. Çdo kanal është i izoluar nga kanalet e tjera. Në rastin sinkron, nuk është e mundur të kryhet komanda tjetër derisa të marrësh një përgjigje.
Për të pasur mundësinë të dërgosh komandat paralelisht duhet të hapësh disa kanale. Çdo kanal krijon një Erlang proces të veçantë. Një lidhje mund të ketë shumë kanale (). Për çdo kanal ekzistojnë disa struktura dhe objekte në memorie. Prandaj, sa më shumë kanale të ketë brenda lidhjes, aq më shumë memorie përdor RabbitMQ për të menaxhuar këtë lidhje.

Një shembull i thjeshtë i krijimit të një lidhjeje dhe kanali duke përdorur :
// ...
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
}Një lidhje të re për çdo operacion, është shumë e papërshtatshme, pasi kjo do të çojë në kosto të mëdha. Kanalet gjithashtu duhet të jenë të vazhdueshme, por shumë gabime protokoli çojnë në mbylljen e kanalit, prandaj koha e jetës së kanalit mund të jetë më e shkurtër se sa ajo e lidhjes.
Ku përdoret RabbitMQ?
Në kontekstin e mikroshërbimeve, protokolli AMQP dhe implementimi i tij në RabbitMQ përdoren shpesh për interaksionin asinkron midis shërbimeve.
Në kontekstin e IIOT protokolli AMQP dhe implementimi i tij në RabbitMQ përdoren për ndarjen e të dhënave midis serverëve (server-server). Përdoret gjithashtu plugu i është një implementim i protokollit për transferimin e të dhënave midis sensoreve dhe serverëve në mjedise me shpejtësi të ulët dhe vonesë të lartë (lista e plotë e protokolleve të mbështetura është e renditur në ).
Në artikullin e ardhshëm do të fillojmë të studiojmë më në detaje Exchanges.
Linket
Burimi: habr.com
