RabbitMQ. 1. del. Uvod. Erlang, AMQP

Dober dan, Habr! Deliti želim učbenik-priročnik znanja, ki mi ga je uspelo zbrati RabbitMQ in strniti v kratka priporočila in zaključke.

Kazalo

  • RabbitMQ. 1. del. Uvod. Erlang, AMQP in RPC
  • RabbitMQ. 2. del. Razumevanje izmenjav
  • RabbitMQ. Del 3. Razumevanje čakalnih vrst in vezav
  • RabbitMQ. 4. del. Razumevanje sporočil in okvirjev
  • RabbitMQ. 5. del: Zmogljivost objavljanja in uživanja sporočil
  • RabbitMQ. Del 6. Pregled modulov Federation in Shovel
  • RabbitMQ. Del 7. Podrobnosti o Connection in Chanel
  • RabbitMQ. Del 8. RabbitMQ v .NET
  • RabbitMQ. Del 9. Spremljanje

Na kratko o AMQP

AMQP (Advanced Message Queuing Protocol) je odprt protokol za prenos sporočil med komponentami sistema. Osnovna ideja je, da si lahko posamezni podsistemi (ali neodvisne aplikacije) poljubno izmenjujejo sporočila prek posrednika AMQP, ki izvaja usmerjanje, morebitno jamstvo za dostavo, distribucijo podatkovnih tokov in naročanje na želene vrste sporočil.

Protokol AMQP uvaja tri pojme:

RabbitMQ. 1. del. Uvod. Erlang, AMQP

  • exchange (menjalno mesto ali menjalnica) - nanjo se pošiljajo sporočila. Menjalno mesto razdeli sporočilo v eni ali več čakalnih vrstah. Ona usmerja sporočila v čakalno vrsto na podlagi ustvarjenih povezav (binding) med njim in čakalno vrsto
  • queue (čakalna vrsta) - podatkovna struktura na disku ali v RAM-u, ki shranjuje povezave do sporočil in daje kopije sporočil consumers (potrošnikom)
  • binding (zavezujoče) - pravilo, ki sporoči točki izmenjave, v katero čakalno vrsto naj gredo ta sporočila

Protokol teče na vrhu TCP / IP.

Na kratko o Erlangu

Izvorna koda projekta je v repozitoriju na naslovu GitHub. Arhitektura Strežnik RabbitMQ temelji na Erlang in BEAM.

Erlang razvilo podjetje Ericsson sredi osemdesetih let 1980. stoletja kot porazdeljen sistem v realnem času, odporen na napake, za aplikacije, ki zahtevajo 99,999 % neprekinjeno delovanje. Erlang uporabljajo v različnih industrijah in sodobnih aplikacijah, npr. WhatsApp. Več si lahko preberete v članku Arhitektura WhatsApp, ki jo je Facebook kupil za 19 milijard dolarjev

Na kratko o RabbitMQ

RabbitMQ je odprtokodni posrednik sporočil. Usmerja sporočila po vseh osnovnih načelih protokola AMQP opisano v specifikacije. RabbitMQ izvaja in dopolnjuje protokol AMQP.

Glavna ideja modela sporočanja v RabbitMQ stvar je producer (založnik) ne pošilja sporočil neposredno v čakalno vrsto. Pravzaprav in pogosto založnik niti ne ve, ali bo sporočilo sploh dostavljeno v kakšno čakalno vrsto.

Namesto tega lahko založnik pošlje le sporočila izmenjavi. Po eni strani borza sprejema sporočila založnikov, po drugi strani pa jih pošilja v čakalne vrste. Izmenjava mora natančno vedeti, kaj storiti s sporočilom, ki ga prejme. Ali ga je treba dodati v določeno čakalno vrsto? Ali ga je treba dodati v več čakalnih vrst? Ali pa je treba sporočilo prezreti.

RabbitMQ. 1. del. Uvod. Erlang, AMQP

Kratko delo RabbitMQ lahko opišemo na naslednji način:

  1. Založnik pošlje sporočilo določeni borzi
  2. Ko izmenjava prejme sporočilo, ga usmeri v eno ali več čakalnih vrst v skladu z zavezujočimi pravili med njo in čakalno vrsto
  3. Čakalna vrsta shrani sklic na to sporočilo. Samo sporočilo je shranjeno v RAM-u ali na disku
  4. Ko je potrošnik pripravljen prejeti sporočilo iz čakalne vrste, strežnik ustvari kopijo sporočila prek povezave in pošlje
  5. Potrošnik prejme sporočilo in pošlje potrdilo posredniku
  6. Posrednik po prejemu potrditve odstrani kopijo sporočila iz čakalne vrste. Nato izbriše iz RAM-a in diska

RPC

Postopek RPC (klic oddaljene procedure) je osnova skoraj vseh interakcij z jedrom RabbitMQ. Na primer, začetni pogovori o strankinih pogojih z RabbitMQ, prikazuje določen proces RPC. Ko je to zaporedje končano, RabbitMQ bo pripravljen sprejeti zahteve naročnika:

RabbitMQ. 1. del. Uvod. Erlang, AMQP

Tudi v specifikaciji AMQP tako odjemalec kot strežnik lahko izdajata ukaze. To pomeni, da odjemalec čaka na komunikacijo s strežnikom. Ukazi so razredi in metode. na primer Connection.Start – klic metode Start Razred Connection.

Povezava in kanali

Za takšno izmenjavo informacij med odjemalcem in strežnikom, kanalov. Kanali so ustvarjeni znotraj specifično povezavo. Vsak kanal je izoliran od drugih kanalov. V sinhronem primeru ni mogoče izvesti naslednjega ukaza, dokler ni prejet odgovor.

Da lahko pošiljate ukaze vzporedno, morate odpreti več kanalov. Vsak kanal ustvari ločeno Erlang postopek. Ena povezava ima lahko več kanalov (multipleksiranje). Za vsak kanal so v pomnilniku določene strukture in objekti. Zato je več kanalov znotraj povezave, tem RabbitMQ uporablja več pomnilnika za upravljanje takšne povezave.

RabbitMQ. 1. del. Uvod. Erlang, AMQP

Preprost primer ustvarjanja povezave in uporabe kanala 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 
}

Odpiranje nove povezave za vsako operacijo močno odsvetujemo bo povzročilo visoke stroške. Kanali bi morali biti tudi trajni, vendar številne napake protokola povzročijo zaprtje kanala, zato je lahko življenjska doba kanala krajša od življenjske dobe povezave.

Kje se uporablja RabbitMQ?

V kontekstu mikrostoritev je protokol AMQP in njegovo izvedbo v RabbitMQ pogosto uporablja za asinhrona interakcija med storitvami.

V kontekstu IIOT protokol AMQP in njegovo izvedbo v RabbitMQ uporablja se za izmenjavo podatkov med strežniki (strežnik-strežnik). Uporabite tudi vtičnik Vtičnik MQTT RabbitMQ ki je implementacija protokola MQTT za prenos podatkov med senzorjem in strežnikom v okoljih z nizko hitrostjo in visoko zakasnitvijo (celoten seznam podprtih protokolov je naveden na stran projekta).

V naslednjem članku bomo začeli podrobneje razumeti izmenjave.

reference

Vir: www.habr.com

Dodaj komentar