RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

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:

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

  • 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ës
  • queue (rade) - një strukturë të dhënash në disk ose në memorien operative, e cila mban lidhjet me mesazhet dhe jep kopje të mesazheve consumers (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 TCP/IP.

Shkurtimisht për Erlang

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

Erlang u zhvillua nga Ericsson në 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%. Erlang aplikohet në industri të ndryshme dhe aplikacione moderne, për shembull në WhatsApp. Më shumë mund të lexoni në artikullin arkitektura e WhatsApp, e cila u ble nga Facebook për 19 miliardë dollarë

Shkurtimisht për RabbitMQ

RabbitMQ është një broker mesazhesh me kod të hapur. Ai ruterizon mesazhet sipas të gjitha parimeve bazë të protokollit AMQP të përshkruara në specifikimet. 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.

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

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

  1. Botuesi dërgon një mesazh në një këmbim të caktuar
  2. 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.
  3. Radhë mbahet një lidhje me këtë mesazh. Mesazhi vetë ruhet në memorie ose në dysk.
  4. Sapo konsumatori është gati të marrë mesazhin nga radhë, serveri krijon një kopje të mesazhit përmes lidhjes dhe e dërgon.
  5. Konsumatori merr mesazhin dhe i dërgon brokerit një konfirmim.
  6. 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: RPC (thirrja e procedurës së largët) ë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:

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

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

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

Një shembull i thjeshtë i krijimit të 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 
}

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

Në artikullin e ardhshëm do të fillojmë të studiojmë më në detaje Exchanges.

Linket

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster