RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Goddag, Habr! Jeg vil dele en lære- og referenceguide med de oplysninger, jeg har samlet om RabbitMQ og komprimeret til korte anbefalinger og konklusioner.

Indholdsfortegnelse

  • RabbitMQ. Del 1. Introduktion. Erlang, AMQP og RPC
  • RabbitMQ. Del 2. Vi ser på Exchanges
  • RabbitMQ. Del 3. Vi ser på Queues og Bindings
  • RabbitMQ. Del 4. Vi ser på, hvad beskeder og rammer er
  • RabbitMQ. Del 5. Ydeevne for publicering og forbrug af beskeder
  • RabbitMQ. Del 6. Oversigt over modulerne Federation og Shovel
  • RabbitMQ. Del 7. Detaljer om Connection og Channel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Overvågning

Kort om AMQP

AMQP (Advanced Message Queuing Protocol) - en åben protokol til overførsel af beskeder mellem systemkomponenter. Hovedideen er, at separate undersystemer (eller uafhængige applikationer) kan udveksle beskeder på vilkårlig måde gennem en AMQP-broker, som håndterer routing, sikrer mulig leverance, fordeler dataflows og abonnerer på de relevante typer beskeder.

Protokol AMQP introducerer tre begreber:

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

  • exchange (udvekslingspunkt eller udveksling) - beskeder sendes til den. Udvekslingspunktet fordeler besked til én eller flere køer. Den ruter beskeder til køen baseret på de oprettede forbindelser (binding) mellem den og køen
  • kø (kø) - en datastruktur på disk eller i RAM, der opbevarer referencer til beskeder og leverer kopier af beskeder forbrugere (til forbrugerne)
  • binding (binding) - en regel, der fortæller udvekslingspunktet, hvilken af køerne disse beskeder skal sendes til

Protokollen fungerer over TCP/IP.

Kort om Erlang

Projektets kildekode findes i depotet på GitHub. Arkitekturen RabbitMQ-server er baseret på Erlang og BEAM.

Erlang udviklet af Ericsson i midten af 1980'erne som et distribueret, fejltolerant realtidssystem til applikationer, der kræver fejlfri drift på 99,999%. Erlang anvendes i forskellige industrier og moderne applikationer, f.eks. i WhatsApp. Læs mere i artiklen arkitekturen af WhatsApp, som Facebook købte for 19 milliarder dollars

Kort om RabbitMQ

RabbitMQ – det er en open source messaging broker. Den rutere beskeder ifølge de grundlæggende principper for protokollen AMQP beskrevet i specifikationerne. RabbitMQ implementerer og supplerer protokollen AMQP.

Hovedideen i messaging-modellen i RabbitMQ er, at producer (udgiver) ikke sender beskeder direkte til køen. Faktisk ved udgiveren ofte ikke, om beskeden overhovedet vil blive leveret til nogen kø.

I stedet for dette kan udgiveren kun sende meddelelser til en broker. På den ene side modtager brokeren meddelelser fra udgivere, og på den anden sender den dem til køer. Brokeren skal vide præcist, hvad der skal gøres med den modtagne meddelelse. Bør den tilføjes til en bestemt kø? Bør den tilføjes til flere køer? Eller skal meddelelsen ignoreres?

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Arbejdet kan kort beskrives som følger: RabbitMQ Udgiveren sender en meddelelse til en bestemt broker

  1. Brokeren, der modtager meddelelsen, ruter den til en eller flere køer i overensstemmelse med bindingreglerne mellem den og køen
  2. Køen gemmer en reference til denne meddelelse. Selve meddelelsen gemmes i hukommelsen eller på disken
  3. Når forbrugeren er klar til at modtage meddelelsen fra køen, opretter serveren en kopi af meddelelsen via reference og sender den
  4. Forbrugeren modtager meddelelsen og sender en bekræftelse tilbage til brokeren
  5. Brokeren, der modtager bekræftelsen, fjerner kopien af meddelelsen fra køen. Derefter fjerner den den fra hukommelsen og disken
  6. RPC (remote procedure call)

RPC

Proces ligger til grund for næsten alle interaktioner med kernen . For eksempel indledende drøftelser af betingelserne med kunden RabbitMQ, demonstrerer en bestemt proces RabbitMQ. Når denne sekvens er afsluttet, RPCvil den være klar til at modtage anmodninger fra kunden: RabbitMQ Derudover kan både specifikationen

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

og klienten og serveren kalde kommandoer. Dette betyder, at klienten forventer interaktion med serveren. Kommandoer er klasser og metoder. For eksempel, AMQP Connection.Start – kald af metoden Forbindelse og kanaler Start klassen Connection.

Til sådan informationsudveksling mellem klienten og serveren bruges

kanaler . Kanaler oprettes inden foren bestemt forbindelse . Hver kanal er isoleret fra andre kanaler. I det synkrone tilfælde er det ikke muligt at udføre den næste kommando, før et svar er modtaget.For at kunne sende kommandoer parallelt, skal man åbne flere kanaler. Hver kanal opretter en separat

proces. En forbindelse kan have mange kanaler ( Erlang multiplexing). For hver kanal findes der visse strukturer og objekter i hukommelsen. Derfor, jo flere kanaler der er inden for forbindelsen, jomere hukommelse bruger RabbitMQ til at administrere sådan en forbindelse. Et simpelt eksempel på oprettelse af en forbindelse og kanal ved hjælp af

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Et simpelt eksempel på oprettelse af en forbindelse og en kanal ved hjælp af 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 anbefales ikke at åbne en ny forbindelse for hver operation, da det vil medføre høje omkostninger. Kanalerne bør også være vedvarende, men mange protokolfejl fører til lukning af kanalen, så kanalens levetid kan være kortere end forbindelsens.

Hvor bruges RabbitMQ?

I konteksten af mikrotjenester anvendes protokollen AMQP og dens implementering i RabbitMQ bruges ofte til asynkron kommunikation mellem tjenester.

I konteksten IIOT protokol AMQP og dens implementering i RabbitMQ bruges til datadelings mellem servere (server-til-server). Derudover bruges pluginet MQTT Plugin RabbitMQ som er en implementering af protokollen MQTT til dataoverførsel mellem sensor og server i lav-hastighedsmiljøer med høj latency (en komplet liste over understøttede protokoller er nævnt på projektets hjemmeside).

I den næste artikel vil vi begynde at se nærmere på Exchanges.

Links

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster