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:

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øenkø(kø) - en datastruktur på disk eller i RAM, der opbevarer referencer til beskeder og leverer kopier af beskederforbrugere(til forbrugerne)binding(binding) - en regel, der fortæller udvekslingspunktet, hvilken af køerne disse beskeder skal sendes til
Protokollen fungerer over .
Kort om Erlang
Projektets kildekode findes i depotet på . Arkitekturen er baseret på og BEAM.
Erlangudviklet afEricssoni midten af 1980'erne som et distribueret, fejltolerant realtidssystem til applikationer, der kræver fejlfri drift på 99,999%.Erlanganvendes i forskellige industrier og moderne applikationer, f.eks. i
Kort om RabbitMQ
– det er en open source messaging broker. Den rutere beskeder ifølge de grundlæggende principper for protokollen beskrevet i . 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?

Arbejdet kan kort beskrives som følger: RabbitMQ Udgiveren sender en meddelelse til en bestemt broker
- Brokeren, der modtager meddelelsen, ruter den til en eller flere køer i overensstemmelse med bindingreglerne mellem den og køen
- Køen gemmer en reference til denne meddelelse. Selve meddelelsen gemmes i hukommelsen eller på disken
- Når forbrugeren er klar til at modtage meddelelsen fra køen, opretter serveren en kopi af meddelelsen via reference og sender den
- Forbrugeren modtager meddelelsen og sender en bekræftelse tilbage til brokeren
- Brokeren, der modtager bekræftelsen, fjerner kopien af meddelelsen fra køen. Derefter fjerner den den fra hukommelsen og disken
- RPC (remote procedure call)
RPC
Proces . 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

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 multiplexingmere hukommelse bruger RabbitMQ til at administrere sådan en forbindelse. Et simpelt eksempel på oprettelse af en forbindelse og kanal ved hjælp af

Et simpelt eksempel på oprettelse af en forbindelse og en kanal ved hjælp af :
// ...
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 som er en implementering af protokollen 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å ).
I den næste artikel vil vi begynde at se nærmere på Exchanges.
Links
Kilde: habr.com
