RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP

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:

RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP

  • 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 rendit
  • rendit (rendit) — një strukturë të dhënash në disk ose në memorien e përkohshme, e cila merr lidhjet me mesazhet dhe jep kopjet e mesazheve konsumatorë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 TCP/IP.

Së shpejti për Erlang

Kodi burimor i projektit ndodhet në dep GitHub. Arkitektura RabbitMQ-server bazohet në Erlang dhe BEAM.

Erlang e zhvilluar nga Ericsson në 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%. Erlang përdoret në industri të ndryshme dhe aplikacione moderne, për shembull në WhatsApp. Më shumë mund të lexoni në artikullin arkitektura e WhatsApp, të cilën Facebook e bleu për $19 miliardë

Së shpejti për RabbitMQ

RabbitMQ – është një broker mesazhesh me kod burimor të hapur. Ai rregullon mesazhet sipas të gjitha principeve bazë të protokollit AMQP të përshkruara në specifikacioni. 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.

RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP

Përmbledhja e punës RabbitMQ mund të përshkruhet si më poshtë:

  1. Botuesi dërgon mesazhin në një shkëmbim të caktuar
  2. Shkëmbimi, pasi merr mesazhin, e drejton atë në një ose disa radhë sipas rregullave të lidhjes midis tij dhe radhës
  3. Radhë ruan një referencë në këtë mesazh. Vetë mesazhi ruhet në memorie ose në disk
  4. 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
  5. Konsumatori merr mesazhin dhe dërgon një konfirmim tek brokeri
  6. Blerësi, pasi merr konfirmimin, heq kopjen e mesazhit nga radhët. Pastaj e heq nga memoria dhe disku

RPC

Procesi RPC (thënie e procedurës së largët) 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:

RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP

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

RabbitMQ. Pjesa 1. Prezantimi. Erlang, AMQP

Shembulli i thjeshtë për krijimin e një lidhjeje dhe kanali duke përdorur RabbitMQ.Client:

// ...
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 MQTT Plugin RabbitMQ si një implementim i protokollit MQTT 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ë faqja e projektit).

Në artikullin e ardhshëm do të fillojmë të kuptojmë më hollësisht rreth Exchanges.

Linke

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster