Përshëndetje, Habr! Dëshiroj të ndaj një udhëzues-referencë me njohuritë që kam arritur të grumbulloj RabbitMQ dhe t'i përmbledh ato në rekomandime dhe përfundime të shkurtra.
Përmbajtja
- RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP dhe RPC
- RabbitMQ. Pjesa 2. Të kuptojmë Exchanges
- RabbitMQ. Pjesa 3. Duke u marrë me Queues dhe Bindings
- RabbitMQ. Pjesa 4. Të kuptojmë çfarë janë mesazhet dhe framet
- RabbitMQ. Pjesa 5. Performanca e publikimit dhe konsumit të mesazheve
- RabbitMQ. Pjesa 6. Përmbledhje e modulit Federation dhe Shovel
- RabbitMQ. Pjesa 7. Detajet mbi Connection dhe Channel
- RabbitMQ. Pjesa 8. RabbitMQ në .NET
- RabbitMQ. Pjesa 9. Monitorimi
Përmbledhje mbi AMQP
AMQP (Protokolli i Avancuar i Radhitjes së Mesazheve) — një protokoll i hapur për transferimin e mesazheve midis komponentëve të një sistemi. Ideja kryesore është që nën-sistemet e veçanta (apo aplikacionet e pavarura) mund të shkëmbejnë mesazhe në mënyrë të rastësishme përmes brokerit AMQP, i cili realizon marxhëzimin, mundësisht garanton dorëzimin, shpërndarjen e rrjedhave të të dhënave, dhe abonimin në llojet e nevojshme të mesazheve.
Protokolli AMQP introdukon tri koncepte:

exchange(pikë shkëmbimi ose shkëmbim) — në të dërgohen mesazhe. Pika e shkëmbimit distribuon mesazhin në një ose më shumë radhë. Ajo rutesh mesazhet në radhë bazuar në lidhjet e krijuara (lidhi) midis tij dhe renditrendit(rendit) — një strukturë të dhënash në disk ose në memorien e përkohshme, e cila merr lidhjet me mesazhet dhe jep kopjet e mesazhevekonsumatorët(konsumatorëve)lidhi(lidhi) — një rregull që informon pikën e shkëmbimit në cilat rendit këto mesazhe duhet të shkojnë
Prokolli funksionon mbi .
Së shpejti për Erlang
Kodi burimor i projektit ndodhet në dep . Arkitektura bazohet në dhe BEAM.
Erlange zhvilluar ngaEricssonnë mesin e viteve 1980 si një sistem i shpërndarë, të besueshëm, në kohë reale për aplikacione që kërkojnë punë pa ndërprerje 99,999%.Erlangpërdoret në industri të ndryshme dhe aplikacione moderne, për shembull në
Së shpejti për RabbitMQ
– është një broker mesazhesh me kod burimor të hapur. Ai rregullon mesazhet sipas të gjitha principeve 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 qëndron në atë që prodhuese (botuesi) nuk dërgon mesazhe drejtpërdrejt në radhë. Në të vërtetë, dhe shpesh, botuesi edhe nuk e di nëse mesazhi do të dorëzohet në një radhë të caktuar.
Në vend të kësaj, botuesi mund të dërgojë mesazhe vetëm në shkëmbim. Nga njëra anë, shkëmbimi merr mesazhe nga botuesit, dhe nga ana tjetër, i dërgon ato në radhë. Shkëmbimi duhet të ketë një ide të qartë se çfarë të bëjë me mesazhin e pranuar. A duhet të shtohet në një radhë të caktuar? A duhet të shtohet në disa radhë? Apo mesazhi duhet të injorohet.

Përmbledhja e punës RabbitMQ mund të përshkruhet si më poshtë:
- Botuesi dërgon mesazhin në një shkëmbim të caktuar
- Shkëmbimi, pasi merr mesazhin, e drejton atë në një ose disa radhë sipas rregullave të lidhjes midis tij dhe radhës
- Radhë ruan një referencë në këtë mesazh. Vetë mesazhi ruhet në memorie ose në disk
- Sa herë që konsumatori është i gatshëm të marrë mesazhin nga rada, serveri krijon një kopje të mesazhit përmes referencës dhe e dërgon
- Konsumatori merr mesazhin dhe dërgon një konfirmim tek brokeri
- Blerësi, pasi merr konfirmimin, heq kopjen e mesazhit nga radhët. Pastaj e heq nga memoria dhe disku
RPC
Procesi qëndron në themel të të gjitha ndërveprimeve me bërthamën RabbitMQ. Për shembull, diskutimet fillestare mbi kushtet e klientit me RabbitMQ, tregon një proces të caktuar RPC. Sa herë që ky proces përfundon, RabbitMQ do të jetë gati të pranojë kërkesa nga klienti:

Gjithashtu në specifikim AMQP si klienti ashtu edhe serveri mund të thërrasin komanda. Kjo do të thotë se klienti pret të ndërveprojë me serverin. Komandat janë klasa dhe metoda. Për shembull, Connection.Start – thirrja e metodës Start klasës Connection.
Koneksioni dhe kanalet
Për një shkëmbim të tillë informacioni midis klientit dhe serverit përdoren kanalet. Kanalet krijohen brenda një koneksioni 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ë për të dërguar komanda paralelisht, është e nevojshme të hapësh disa kanale. Çdo kanal krijon një Erlang proces të veçantë. Një koneksion mund të ketë shumë kanale (). Për secilin kanal ekzistojnë struktura dhe objekte në memorie. Prandaj, sa më shumë kanale të ketë brenda lidhjes, aq më shumë memorie përdor RabbitMQ për menaxhimin e një lidhjeje të tillë.

Shembulli i thjeshtë për krijimin e 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
}Të hapësh një lidhje të re për çdo operacion, e cila nuk rekomandohet, pasi kjo do të çojë në shpenzime të mëdha. Kanalet gjithashtu duhet të jenë të përhershme, por shumë gabime në protokoll çojnë në mbylljen e kanalit, kështu që jeta e kanalit mund të jetë më e shkurtër se ajo e lidhjes.
Ku përdoret RabbitMQ?
Në kontekstin e mikroshërbimeve, protokolli AMQP dhe implementimi i tij në RabbitMQ shpesh përdoret për interaksionin asinkron midis shërbimeve.
Në kontekstin e IIOT protokolli AMQP dhe implementimi i tij në RabbitMQ përdoret për shkëmbimin e të dhënave midis serverëve (server-server). Gjithashtu përdoret plugini si një implementim i protokollit për dërgimin e të dhënave midis sensorit dhe serverit në mjedise me shpejtësi të ulët dhe latencë të lartë (lista e plotë e protokolleve të mbështetur është përshkruar në ).
Në artikullin e ardhshëm do të fillojmë të kuptojmë më hollësisht rreth Exchanges.
Linke
Burimi: habr.com
