RabbitMQ. Deo 1. Uvod. Erlang, AMQP

Dober dan, Habr! Rad bi delil učbenik-priročnik znanj, ki sem jih uspel zbrati o RabbitMQ in strniti v kratke priporočila in zaključke.

Taula de continguts

  • RabbitMQ. Del 1. Introducció. Erlang, AMQP i RPC
  • RabbitMQ. Del 2. Lletra amb Exchanges
  • RabbitMQ. Del 3. Lletra amb Queues i Bindings
  • RabbitMQ. Del 4. Poglobimo se v to, kaj so sporočila in okviri
  • RabbitMQ. Del 5. Rendiment de la publicació i consum de missatges
  • RabbitMQ. Del 6. Visió general dels mòduls Federation i Shovel
  • RabbitMQ. Del 7. Detalls sobre la connexió i el canal
  • RabbitMQ. Del 8. RabbitMQ en .NET
  • RabbitMQ. Del 9. Monitoratge

Kratka razlaga AMQP

AMQP (Advanced Message Queuing Protocol) je odprti protokol za prenos sporočil med komponentami sistema. Osnovna ideja je, da si lahko posamezni pod sistemi (ali neodvisne aplikacije) izmenjujejo sporočila na poljuben način preko AMQP-posrednika, ki opravlja usmerjanje, morebiti zagotavlja dostavo, porazdelitev podatkovnih tokov ter naročanje na potrebne tipe sporočil.

Protokol AMQP uvaja tri pojme:

RabbitMQ. Deo 1. Uvod. Erlang, AMQP

  • — ime izmenjevalnika (izmenjevalna točka ali izmenjava) - v to se pošiljajo sporočila. Izmenjevalna točka porazdeli sporočilo v eno ali več čakalnih vrst. Ona usmerja sporočila v čakalno vrsto na podlagi ustvarjenih povezav (binding) med njo in čakalno vrsto
  • vrsta (čakalna vrsta) - podatkovna struktura na disku ali v pomnilniku, ki hrani povezave na sporočila in daje kopije sporočil consumidors (potrošnikom)
  • binding (povezava) - pravilo, ki sporoča izmenjevalni točki, v katero čakalno vrsto morajo ta sporočila priti

Protokol deluje nad TCP/IP.

Kratka razlaga Erlang

Izvorna koda projekta se nahaja v repozitoriju na GitHub. Arhitektura RabbitMQ-server temelji na Erlang in BEAM.

Erlang razvil je podjetje Ericsson v sredini 1980-ih kot porazdeljen, odpornoten sistem v realnem času za aplikacije, ki zahtevajo brezokvarno delovanje 99,999%. Erlang se uporablja v različnih panogah in sodobnih aplikacijah, na primer v WhatsApp. Več o tem lahko preberete v članku arhitektura WhatsApp, ki ga je Facebook kupil za 19 milijard dolarjev

Kratka razlaga RabbitMQ

RabbitMQ je posrednik sporočil z odprtim izvorom. Usmerja sporočila po vseh osnovnih načelih protokola AMQP opisanih v specifikacije. RabbitMQ izvaja in dopolnjuje protokol AMQP.

Osnovna ideja modela izmenjave sporočil v RabbitMQ je, da producer (izdajatelj) ne pošilja sporočil neposredno v čakalno vrsto. V bistvu in precej pogosto izdajatelj celo ne ve, ali bo sporočilo sploh dostavljeno v katero koli čakalno vrsto.

Namesto tega lahko izdajatelj pošilja sporočila le na izmenjavo. Na eni strani izmenjava prejme sporočila od izdajateljev, na drugi pa jih pošilja v vrste. Izmenjava mora natančno vedeti, kaj storiti s prejetim sporočilom. Ali naj se doda določenemu vrsti? Ali naj se doda več vrstam? Ali je sporočilo treba prezreti?

RabbitMQ. Deo 1. Uvod. Erlang, AMQP

Delo lahko na kratko opišemo takole: RabbitMQ можно описать следующим образом:

  1. Izdajatelj pošlje sporočilo določeni izmenjavi
  2. Izmenjava, ko prejme sporočilo, usmeri to v eno ali več vrst v skladu s pravili vezave med njo in vrsto
  3. Vrsta hrani povezavo na to sporočilo. Samo sporočilo je shranjeno v pomnilniku ali na disku
  4. Ko je porabnik pripravljen prejeti sporočilo iz vrste, strežnik ustvari kopijo sporočila na povezavi in ga pošlje
  5. Porabnik prejme sporočilo in pošlje potrditev posredniku
  6. Posrednik, ko prejme potrditev, odstrani kopijo sporočila iz vrste. Nato jo odstrani iz RAM-a in z diska

RPC

Postopek RPC (oddaljen klic funkcij) je osnova praktično vseh interakcij z jedrom RabbitMQ. Na primer, prvotna razprava o pogojih stranke z RabbitMQ, prikazuje določen proces RPC. Ko se ta zaporedje zaključi, RabbitMQ bo pripravljen sprejemati zahteve od stranke:

RabbitMQ. Deo 1. Uvod. Erlang, AMQP

Prav tako v specifikaciji AMQP lahko tako stranka kot strežnik kličeta ukaze. To pomeni, da stranka pričakuje interakcijo s strežnikom. Ukazi so razredi in metode. Na primer, Connection.Start – klic metode Začni klasa Povezava.

Povezava in kanali

Za takšno izmenjavo informacij med stranko in strežnikom se uporabljajo kanali. Kanali so ustvarjeni v okviru določenega povezovanja. Vsak kanal je izoliran od drugih kanalov. V sinhronem primeru ni mogoče izvesti naslednjega ukaza, dokler ne prejmete odgovora.

Da bi lahko hkrati pošiljali ukaze, je treba odpreti več kanalov. Vsak kanal ustvari ločen Erlang postopek. Ena povezava lahko ima več kanalov (multiplexing). Za vsak kanal obstajajo določene strukture in objekti v pomnilniku. Zato več kot je kanalov v okviru povezave, več pomnilnika uporablja RabbitMQ za upravljanje te povezave.

RabbitMQ. Deo 1. Uvod. Erlang, AMQP

Preprost primer ustvarjanja povezave in kanala s pomočjo 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 
}

Odprtje nove povezave za vsako operacijo se strogo ne priporoča, saj to privede do velikih stroškov. Kanali morajo biti prav tako stalni, vendar številne napake protokola povzročajo zaprtje kanala, zato je lahko življenjska doba kanala krajša od življenjske dobe povezave.

Kje se uporablja RabbitMQ?

V kontekstu mikroservisov se protokol AMQP in njegova realizacija v RabbitMQ pogosto uporabljata za asinhrono interakcijo med storitvami.

V kontekstu IIOT protokol AMQP in njegova realizacija v RabbitMQ se uporablja za izmenjavo podatkov med strežniki (strežnik-strežnik). Prav tako se uporablja vtičnik MQTT Plugin RabbitMQ ki je realizacija protokola MQTT za prenos podatkov med senzorjem in strežnikom v nizkodočnih okoljih z visokimi zakasnitvami (popoln seznam podprtih protokolov je naveden na na spletni strani projekta).

V naslednjem članku se bomo podrobneje lotili Exchanges.

Povezave

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster