RabbitMQ. Del 1. Introduktion. Erlang, AMQP

God eftermiddag, Habr! Jeg vil gerne dele en lærebog-referencebog med viden, som jeg formåede at samle på RabbitMQ og kondensere til korte anbefalinger og konklusioner.

indholdsfortegnelse

  • RabbitMQ. Del 1. Introduktion. Erlang, AMQP og RPC
  • RabbitMQ. Del 2. Forståelse af udvekslinger
  • RabbitMQ. Del 3. Forstå køer og bindinger
  • RabbitMQ. Del 4. Forstå, hvad budskaber og rammer er
  • RabbitMQ. Del 5: Udgivelse og forbrug af budskabsydelse
  • RabbitMQ. Del 6. Oversigt over forbunds- og skovlmodulerne
  • RabbitMQ. Del 7. Detaljer om Connection og Chanel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Overvågning

Kort om AMQP

AMQP (Advanced Message Queuing Protocol) er en åben protokol til transmission af meddelelser mellem systemkomponenter. Grundtanken er, at individuelle undersystemer (eller uafhængige applikationer) kan udveksle beskeder på en vilkårlig måde gennem en AMQP-mægler, som udfører routing, eventuelt garanterer levering, distribuerer datastrømme og abonnerer på de ønskede beskedtyper.

protokol AMQP introducerer tre begreber:

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

  • exchange (udvekslingspunkt eller udveksling) - beskeder sendes til det. Udskiftningspunkt distribuerer budskabet i en eller flere køer. Hun dirigerer beskeder til en kø baseret på oprettede links (binding) mellem ham og køen
  • queue (kø) - en datastruktur på disk eller i RAM, der gemmer links til beskeder og giver kopier af beskeder consumers (til forbrugere)
  • binding (bindende) - en regel, der fortæller udvekslingspunktet, hvilken kø disse beskeder skal stå i

Protokollen kører ovenpå TCP / IP.

Kort om Erlang

Projektets kildekode er i depotet på GitHub. Arkitektur RabbitMQ-server baseret på erlang og BEAM.

Erlang udviklet af virksomheden Ericsson i midten af ​​1980'erne som et distribueret, fejltolerant, realtidssystem til applikationer, der kræver 99,999 % oppetid. Erlang bruges i forskellige industrier og moderne applikationer, f.eks. WhatsApp. Du kan læse mere i artiklen WhatsApp-arkitektur, som Facebook købte for 19 mia

Kort om RabbitMQ

RabbitMQ er en open source-meddelelsesmægler. Det dirigerer beskeder langs alle protokollens grundlæggende principper AMQP beskrevet i specifikationer. RabbitMQ implementerer og supplerer protokollen AMQP.

Hovedidéen med meddelelsesmodellen i RabbitMQ ting er producer (udgiver) sender ikke beskeder direkte til køen. Faktisk, og ganske ofte, ved udgiveren ikke engang, om beskeden overhovedet bliver leveret til nogen kø.

I stedet kan udgiveren kun sende beskeder til børsen. På den ene side modtager børsen beskeder fra udgivere, og på den anden side sender den dem i kø. Udvekslingen skal vide præcis, hvad den skal gøre med den besked, den modtager. Skal det føjes til en bestemt kø? Skal det føjes til flere køer? Eller beskeden skal ignoreres.

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Kort arbejde RabbitMQ kan beskrives som følger:

  1. Udgiveren sender en besked til en bestemt børs
  2. En central, der har modtaget en besked, dirigerer den til en eller flere køer i overensstemmelse med de bindende regler mellem den og køen
  3. Køen gemmer en reference til denne besked. Selve beskeden er gemt i RAM eller på disk
  4. Når forbrugeren er klar til at modtage en besked fra køen, opretter serveren en kopi af beskeden via linket og sender
  5. Forbrugeren modtager beskeden og sender en bekræftelse til mægleren
  6. Mægleren fjerner, efter at have modtaget bekræftelse, en kopi af beskeden fra køen. Sletter derefter fra RAM og disk

RPC

Процесс RPC (remote procedure call) ligger til grund for næsten alle interaktioner med kernen RabbitMQ. Eksempelvis indledende drøftelser om klientens vilkår med RabbitMQ, demonstrerer en bestemt proces RPC. Når denne sekvens er fuldført, RabbitMQ vil være klar til at acceptere anmodninger fra kunden:

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Også i specifikationen AMQP både klienten og serveren kan udstede kommandoer. Det betyder, at klienten venter på at kommunikere med serveren. Kommandoer er klasser og metoder. For eksempel, Connection.Start – metodekald Start klasse Connection.

Tilslutning og kanaler

For sådan informationsudveksling mellem klient og server, kanaler. Kanaler oprettes indeni specifik 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 der modtages et svar.

For at kunne sende kommandoer parallelt, skal du åbne flere kanaler. Hver kanal opretter en separat Erlang behandle. En forbindelse kan have flere kanaler (multiplexing). For hver kanal er der visse strukturer og objekter i hukommelsen. Derfor, jo flere kanaler der er inden for en forbindelse, jo RabbitMQ bruger mere hukommelse at administrere en sådan forbindelse.

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Et simpelt eksempel på at skabe en forbindelse og 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 frarådes på det kraftigste at åbne en ny forbindelse for hver operation vil føre til høje omkostninger. Kanaler bør også være vedvarende, men mange protokolfejl får kanalen til at lukke, så kanalens levetid kan være kortere end forbindelsens.

Hvor bruges RabbitMQ?

I forbindelse med mikrotjenester, protokollen AMQP og dens implementering i RabbitMQ ofte brugt til asynkron interaktion mellem tjenester.

I sammenhæng IIOT protokol AMQP og dens implementering i RabbitMQ bruges til dataudveksling mellem servere (server-server). Brug også plugin'et MQTT-plugin RabbitMQ som er en implementering af protokollen MQTT til overførsel af data mellem sensor og server i miljøer med lav hastighed og høj latens (en komplet liste over understøttede protokoller er vist på projektets hjemmeside).

I den næste artikel vil vi begynde at forstå Exchanges mere detaljeret.

RЎSЃS <P "RєRё

Kilde: www.habr.com

Tilføj en kommentar