RabbitMQ. Dio 1. Uvod. Erlang, AMQP

Dobar dan, Habr! Želim podijeliti udžbenik-priručnik znanja koji sam uspio prikupiti RabbitMQ te sažeti u kratke preporuke i zaključke.

pregled sadržaja

  • RabbitMQ. Dio 1. Uvod. Erlang, AMQP i RPC
  • RabbitMQ. Dio 2. Razumijevanje razmjena
  • RabbitMQ. Dio 3. Razumijevanje redova čekanja i povezivanja
  • RabbitMQ. Dio 4. Razumijevanje što su poruke i okviri
  • RabbitMQ. Dio 5: Izvedba poruke objavljivanja i konzumiranja
  • RabbitMQ. Dio 6. Pregled modula Federation i Shovel
  • RabbitMQ. Dio 7. Pojedinosti o vezi i Chanelu
  • RabbitMQ. Dio 8. RabbitMQ u .NET-u
  • RabbitMQ. Dio 9. Praćenje

Ukratko o AMQP

AMQP (Advanced Message Queuing Protocol) je otvoreni protokol za prijenos poruka između komponenti sustava. Osnovna ideja je da pojedinačni podsustavi (ili neovisne aplikacije) mogu razmjenjivati ​​poruke na proizvoljan način preko AMQP brokera, koji obavlja usmjeravanje, eventualno jamči isporuku, distribuira tokove podataka i pretplaćuje se na željene vrste poruka.

protokol AMQP uvodi tri pojma:

RabbitMQ. Dio 1. Uvod. Erlang, AMQP

  • exchange (mjenjačnica ili mjenjačnica) - na nju se šalju poruke. Mjenjačnica distribuira poruku u jednom ili više redova. Ona usmjerava poruke u red čekanja na temelju stvorenih poveznica (binding) između njega i reda čekanja
  • queue (queue) – struktura podataka na disku ili u RAM-u koja pohranjuje poveznice na poruke i daje kopije poruka consumers (potrošačima)
  • binding (obvezujući) - pravilo koje govori točki razmjene u koji red čekanja te poruke trebaju ići

Protokol radi na vrhu TCP / IP.

Ukratko o Erlangu

Izvorni kod projekta nalazi se u repozitoriju na GitHub. Arhitektura RabbitMQ-poslužitelj na temelju erlang i GREDA.

Erlang razvila tvrtka Ericsson sredinom 1980-ih kao distribuirani sustav u stvarnom vremenu otporan na greške za aplikacije koje zahtijevaju 99,999% neprekidnog rada. Erlang koristi se u raznim industrijama i modernim primjenama, npr. WhatsApp. Više možete pročitati u članku WhatsApp arhitektura koju je Facebook kupio za 19 milijardi dolara

Ukratko o RabbitMQ

Zec MQ je broker poruka otvorenog koda. Usmjerava poruke uz sve osnovne principe protokola AMQP opisano u tehnički podaci. RabbitMQ provodi i dopunjuje protokol AMQP.

Glavna ideja modela slanja poruka u RabbitMQ stvar je producer (izdavač) ne šalje poruke izravno u red čekanja. Zapravo, i to prilično često, izdavač niti ne zna hoće li poruka uopće biti isporučena u bilo koji red čekanja.

Umjesto toga, izdavač može samo slati poruke burzi. S jedne strane, burza prima poruke od izdavača, as druge strane ih šalje u redove. Razmjena mora točno znati što učiniti s porukom koju primi. Treba li ga dodati u određeni red čekanja? Treba li ga dodati u više redova čekanja? Ili poruku treba ignorirati.

RabbitMQ. Dio 1. Uvod. Erlang, AMQP

Kratak rad RabbitMQ može se opisati na sljedeći način:

  1. Izdavač šalje poruku određenoj burzi
  2. Razmjena, nakon što primi poruku, usmjerava je u jedan ili više redova čekanja u skladu s pravilima povezivanja između nje i reda čekanja
  3. Red čekanja pohranjuje referencu na ovu poruku. Sama poruka pohranjuje se u RAM ili na disk
  4. Nakon što je korisnik spreman primiti poruku iz reda čekanja, poslužitelj stvara kopiju poruke putem veze i šalje
  5. Potrošač prima poruku i šalje potvrdu posredniku
  6. Broker, nakon što dobije potvrdu, uklanja kopiju poruke iz reda čekanja. Zatim briše iz RAM-a i diska

RPC

proces RPC (poziv udaljene procedure) leži u osnovi gotovo svih interakcija s jezgrom RabbitMQ. Na primjer, početni razgovori o uvjetima klijenta s RabbitMQ, demonstrira određeni proces RPC. Kada se ovaj niz završi, RabbitMQ bit će spremni prihvatiti zahtjeve klijenta:

RabbitMQ. Dio 1. Uvod. Erlang, AMQP

Također u specifikaciji AMQP i klijent i poslužitelj mogu izdavati naredbe. To znači da klijent čeka na komunikaciju s poslužiteljem. Naredbe su klase i metode. Na primjer, Connection.Start – poziv metode Start razred Connection.

Veza i kanali

Za takvu razmjenu informacija između klijenta i poslužitelja, kanali. Kanali se stvaraju unutar specifična veza. Svaki kanal je izoliran od ostalih kanala. U sinkronom slučaju nije moguće izvršiti sljedeću naredbu dok se ne primi odgovor.

Da biste mogli slati naredbe paralelno, morate otvoriti nekoliko kanala. Svaki kanal stvara zaseban Erlang postupak. Jedna veza može imati više kanala (multipleksiranje). Za svaki kanal postoje određene strukture i objekti u memoriji. Stoga, što je više kanala unutar veze, to RabbitMQ koristi više memorije upravljati takvom vezom.

RabbitMQ. Dio 1. Uvod. Erlang, AMQP

Jednostavan primjer stvaranja veze i korištenja 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 
}

Stoga se izričito ne preporučuje otvaranje nove veze za svaku operaciju dovest će do visokih troškova. Kanali bi također trebali biti postojani, ali mnoge pogreške protokola uzrokuju zatvaranje kanala, tako da životni vijek kanala može biti kraći od vijeka trajanja veze.

Gdje se koristi RabbitMQ?

U kontekstu mikroservisa, protokol AMQP i njegovu implementaciju u RabbitMQ često se koristi za asinkrona interakcija između usluga.

U kontekstu IIOT protokol AMQP i njegovu implementaciju u RabbitMQ služi za razmjenu podataka između poslužitelja (poslužitelj-poslužitelj). Također koristite dodatak MQTT dodatak RabbitMQ što je implementacija protokola MQTT za prijenos podataka između senzora i poslužitelja u okruženjima male brzine i visoke latencije (potpuni popis podržanih protokola naveden je na web mjesto projekta).

U sljedećem ćemo članku detaljnije razumjeti Burze.

reference

Izvor: www.habr.com

Dodajte komentar