RabbitMQ. Del 1. Introduksjon. Erlang, AMQP

God ettermiddag, Habr! Jeg vil dele en lærebok-referansebok med kunnskap som jeg klarte å samle på RabbitMQ og kondensere til korte anbefalinger og konklusjoner.

innholdsfortegnelsen

  • RabbitMQ. Del 1. Introduksjon. Erlang, AMQP og RPC
  • RabbitMQ. Del 2. Forstå utvekslinger
  • RabbitMQ. Del 3. Forstå køer og bindinger
  • RabbitMQ. Del 4. Forstå hva meldinger og rammer er
  • RabbitMQ. Del 5: Publisering og forbruk av meldingsytelse
  • RabbitMQ. Del 6. Oversikt over forbunds- og spademodulene
  • RabbitMQ. Del 7. Detaljer om Connection og Chanel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Overvåking

Kort om AMQP

AMQP (Advanced Message Queuing Protocol) er en åpen protokoll for overføring av meldinger mellom systemkomponenter. Grunntanken er at individuelle undersystemer (eller uavhengige applikasjoner) kan utveksle meldinger på en vilkårlig måte gjennom en AMQP-megler, som utfører ruting, muligens garanterer levering, distribuerer datastrømmer og abonnerer på ønskede meldingstyper.

Protokoll AMQP introduserer tre konsepter:

RabbitMQ. Del 1. Introduksjon. Erlang, AMQP

  • exchange (utvekslingspunkt eller utveksling) - meldinger sendes til den. Byttepunkt distribuerer melding i en eller flere køer. Hun ruter meldinger til en kø basert på de opprettede forbindelsene (binding) mellom ham og køen
  • queue (kø) - en datastruktur på disk eller i RAM som lagrer lenker til meldinger og gir kopier av meldinger consumers (til forbrukere)
  • binding (bindende) - en regel som forteller utvekslingspunktet hvilken kø disse meldingene skal gå inn i

Protokollen kjører på toppen TCP / IP.

Kort om Erlang

Prosjektets kildekode er i depotet på GitHub. Arkitektur RabbitMQ-server basert på erlang og BEAM.

Erlang utviklet av selskapet Ericsson på midten av 1980-tallet som et distribuert, feiltolerant, sanntidssystem for applikasjoner som krever 99,999 % oppetid. Erlang brukes i ulike bransjer og moderne applikasjoner, f.eks. WhatsApp. Du kan lese mer i artikkelen WhatsApp-arkitektur, som Facebook kjøpte for 19 milliarder dollar

Kort om RabbitMQ

Kanin MQ er en åpen kildekode-meldingsmegler. Den ruter meldinger langs alle de grunnleggende prinsippene i protokollen AMQP beskrevet i spesifikasjoner. RabbitMQ implementerer og supplerer protokollen AMQP.

Hovedideen til meldingsmodellen i RabbitMQ tingen er producer (utgiver) sender ikke meldinger direkte til køen. Faktisk, og ganske ofte, vet ikke utgiveren engang om meldingen vil bli levert til noen kø i det hele tatt.

I stedet kan utgiveren bare sende meldinger til sentralen. På den ene siden mottar sentralen meldinger fra utgivere, og på den andre siden sender den dem til køer. Utvekslingen må vite nøyaktig hva den skal gjøre med meldingen den mottar. Bør det legges til en bestemt kø? Bør det legges til flere køer? Eller meldingen bør ignoreres.

RabbitMQ. Del 1. Introduksjon. Erlang, AMQP

Kort arbeid RabbitMQ kan beskrives som følger:

  1. Utgiveren sender en melding til en bestemt børs
  2. En sentral, etter å ha mottatt en melding, ruter den til en eller flere køer i samsvar med de bindende reglene mellom den og køen
  3. Køen lagrer en referanse til denne meldingen. Selve meldingen lagres i RAM eller på disk
  4. Når forbrukeren er klar til å motta en melding fra køen, lager serveren en kopi av meldingen via lenken og sender
  5. Forbrukeren mottar meldingen og sender bekreftelse til megleren
  6. Megleren, etter å ha mottatt bekreftelse, fjerner en kopi av meldingen fra køen. Sletter deretter fra RAM og disk

RPC

prosessen RPC (fjernprosedyrekall) ligger til grunn for nesten alle interaksjoner med kjernen RabbitMQ. For eksempel innledende diskusjoner om klientens vilkår med RabbitMQ, demonstrerer en viss prosess RPC. Når denne sekvensen er fullført, RabbitMQ vil være klar til å akseptere forespørsler fra klienten:

RabbitMQ. Del 1. Introduksjon. Erlang, AMQP

Også i spesifikasjonen AMQP både klienten og serveren kan utstede kommandoer. Dette betyr at klienten venter på å kommunisere med serveren. Kommandoer er klasser og metoder. For eksempel, Connection.Start – metodekall Start klasse Connection.

Tilkobling og kanaler

For slik informasjonsutveksling mellom klient og server, kanaler. Kanaler opprettes innenfor spesifikk forbindelse. Hver kanal er isolert fra andre kanaler. I det synkrone tilfellet er det ikke mulig å utføre neste kommando før et svar er mottatt.

For å kunne sende kommandoer parallelt, må du åpne flere kanaler. Hver kanal oppretter en separat Erlang prosess. Én tilkobling kan ha flere kanaler (multiplexing). For hver kanal er det visse strukturer og objekter i minnet. Derfor, jo flere kanaler det er innenfor en forbindelse, jo RabbitMQ bruker mer minne å administrere en slik forbindelse.

RabbitMQ. Del 1. Introduksjon. Erlang, AMQP

Et enkelt eksempel på å opprette en forbindelse og kanal ved hjelp av 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 
}

Det frarådes på det sterkeste å åpne en ny forbindelse for hver operasjon vil føre til høye kostnader. Kanaler bør også være vedvarende, men mange protokollfeil fører til at kanalen lukkes, så levetiden til kanalen kan være kortere enn tilkoblingens levetid.

Hvor brukes RabbitMQ?

I sammenheng med mikrotjenester, protokollen AMQP og dens implementering i RabbitMQ ofte brukt til asynkron interaksjon mellom tjenester.

I konteksten IIOT protokoll AMQP og dens implementering i RabbitMQ brukes til datautveksling mellom servere (server-server). Bruk også plugin MQTT-plugin RabbitMQ som er en implementering av protokollen MQTT for overføring av data mellom sensor og server i miljøer med lav hastighet og høy latens (en fullstendig liste over støttede protokoller er oppført på prosjektnettsted).

I den neste artikkelen vil vi begynne å forstå Exchanges mer detaljert.

referanser

Kilde: www.habr.com

Legg til en kommentar