RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

Mirëdita, Habr! Unë dua të ndaj një libër shkollor-referencë të njohurive që kam arritur të mbledh mbi RabbitMQ dhe kondensohet në rekomandime dhe përfundime të shkurtra.

Përmbajtje

  • RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP dhe RPC
  • RabbitMQ. Pjesa 2. Kuptimi i shkëmbimeve
  • RabbitMQ. Pjesa 3. Kuptimi i radhëve dhe lidhjeve
  • RabbitMQ. Pjesa 4. Të kuptuarit se çfarë janë mesazhet dhe kornizat
  • RabbitMQ. Pjesa 5: Publikimi i mesazheve dhe performanca e konsumit
  • RabbitMQ. Pjesa 6. Rishikimi i moduleve të Federatës dhe Lopatës
  • RabbitMQ. Pjesa 7. Detaje rreth Connection dhe Chanel
  • RabbitMQ. Pjesa 8. RabbitMQ në .NET
  • RabbitMQ. Pjesa 9. Monitorimi

Shkurtimisht rreth AMQP

AMQP (Advanced Message Queuing Protocol) është një protokoll i hapur për transmetimin e mesazheve ndërmjet komponentëve të sistemit. Ideja bazë është që nënsistemet individuale (ose aplikacionet e pavarura) mund të shkëmbejnë mesazhe në mënyrë arbitrare përmes një ndërmjetësi AMQP, i cili kryen rrugëzimin, mundësisht garanton shpërndarjen, shpërndan rrjedhat e të dhënave dhe abonohet në llojet e mesazheve të dëshiruara.

Protokolli AMQP prezanton tre koncepte:

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

  • exchange (pika e shkëmbimit ose shkëmbimi) - i dërgohen mesazhe. Pika e këmbimit shpërndan mesazh në një ose më shumë radhë. Ajo dërgon mesazhet në një radhë bazuar në lidhjet e krijuara (binding) midis tij dhe radhës
  • queue (radhë) - një strukturë të dhënash në disk ose në RAM që ruan lidhjet e mesazheve dhe jep kopje të mesazheve consumers (për konsumatorët)
  • binding (i detyrueshëm) - një rregull që tregon pikën e shkëmbimit në cilën radhë duhet të futen këto mesazhe

Protokolli funksionon në krye TCP / IP.

Shkurtimisht për Erlang

Kodi burimor i projektit është në depo në GitHub. Arkitekturë Serveri RabbitMQ bazuar në erlang dhe RREZ.

Erlang zhvilluar nga kompania Ericsson në mesin e viteve 1980 si një sistem i shpërndarë, tolerant ndaj gabimeve, në kohë reale për aplikacionet që kërkojnë 99,999% kohë pune. Erlang përdoret në industri të ndryshme dhe aplikime moderne, p.sh. WhatsApp. Mund të lexoni më shumë në artikull Arkitektura e WhatsApp, të cilën Facebook e bleu për 19 miliardë dollarë

Shkurtimisht rreth RabbitMQ

LepuriMQ është një ndërmjetës mesazhesh me burim të hapur. Ai drejton mesazhet përgjatë të gjitha parimeve bazë të protokollit AMQP përshkruar në specifikimet. RabbitMQ zbaton dhe plotëson protokollin AMQP.

Ideja kryesore e modelit të mesazheve në RabbitMQ gje eshte producer (botuesi) nuk dërgon mesazhe direkt në radhë. Në fakt, dhe mjaft shpesh, botuesi as nuk e di nëse mesazhi do të dërgohet fare në ndonjë radhë.

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ë dijë saktësisht se çfarë të bëjë me mesazhin që merr. A duhet të shtohet në një radhë specifike? A duhet të shtohet në radhë të shumta? Ose mesazhi duhet të injorohet.

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

Punë e shkurtër RabbitMQ mund të përshkruhet si më poshtë:

  1. Botuesi i dërgon një mesazh një shkëmbimi specifik
  2. Një shkëmbim, pasi ka marrë një mesazh, e drejton atë në një ose më shumë radhë në përputhje me rregullat detyruese midis tij dhe radhës
  3. Radha ruan një referencë për këtë mesazh. Vetë mesazhi ruhet në RAM ose në disk
  4. Pasi konsumatori është gati të marrë një mesazh nga radha, serveri krijon një kopje të mesazhit nëpërmjet lidhjes dhe dërgon
  5. Konsumatori merr mesazhin dhe i dërgon konfirmimin ndërmjetësit
  6. Ndërmjetësi, me marrjen e konfirmimit, heq një kopje të mesazhit nga radha. Pastaj fshihet nga RAM dhe disku

RPC

proces RPC (telefonata e procedurës në distancë) qëndron në themel të pothuajse të gjitha ndërveprimeve me bërthamën RabbitMQ. Për shembull, diskutimet fillestare rreth kushteve të klientit me RabbitMQ, demonstron një proces të caktuar RPC. Pasi të përfundojë kjo sekuencë, RabbitMQ do të jetë i gatshëm të pranojë kërkesat nga klienti:

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

Gjithashtu në specifikim AMQP si klienti ashtu edhe serveri mund të lëshojnë komanda. Kjo do të thotë që klienti është duke pritur për të komunikuar me serverin. Komandat janë klasa dhe metoda. Për shembull, Connection.Start - thirrja e metodës Start klasë Connection.

Lidhja dhe kanalet

Për një shkëmbim të tillë informacioni ndërmjet klientit dhe serverit, kanaleve. Kanalet krijohen brenda lidhje specifike. Çdo kanal është i izoluar nga kanalet e tjera. Në rastin sinkron, nuk është e mundur të ekzekutohet komanda tjetër derisa të merret një përgjigje.

Që të mund të dërgoni komanda paralelisht, duhet të hapni disa kanale. Çdo kanal krijon një të veçantë Erlang procesi. Një lidhje mund të ketë shumë kanale (multipleksimi). Për çdo kanal ka struktura dhe objekte të caktuara në memorie. Prandaj, sa më shumë kanale të ketë brenda një lidhjeje, aq RabbitMQ përdor më shumë memorie për të menaxhuar një lidhje të tillë.

RabbitMQ. Pjesa 1. Hyrje. Erlang, AMQP

Një shembull i thjeshtë i krijimit të një lidhjeje dhe kanali duke përdorur RabbitMQ.Klient:

// ...
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 
}

Hapja e një lidhjeje të re për çdo operacion dekurajohet fuqimisht si kjo do të çojë në kosto të larta. Kanalet gjithashtu duhet të jenë të qëndrueshme, por shumë gabime të protokollit shkaktojnë mbylljen e kanalit, kështu që jetëgjatësia e kanalit mund të jetë më e shkurtër se ajo e lidhjes.

Ku përdoret RabbitMQ?

Në kuadrin e mikroshërbimeve, protokolli AMQP dhe zbatimi i tij në RabbitMQ përdoret shpesh për ndërveprim asinkron ndërmjet shërbimeve.

Në kontekst IIOT protokolli AMQP dhe zbatimi i tij në RabbitMQ përdoret për shkëmbimin e të dhënave ndërmjet serverëve (server-server). Përdorni gjithashtu shtojcën Shtojca MQTT RabbitMQ që është zbatim i protokollit MQTT për transmetimin e të dhënave ndërmjet sensorit dhe serverit në mjedise me shpejtësi të ulët dhe me vonesë të lartë (një listë e plotë e protokolleve të mbështetura është renditur në uebsajti i projektit).

Në artikullin vijues do të fillojmë të kuptojmë më në detaje Shkëmbimet.

Referencat

Burimi: www.habr.com

Shto një koment