Utgivelse av MyPaint 2.0.0

God dag, Habr! Jeg ønsker å dele en håndbok-guide med kunnskapene jeg har klart å samle om RabbitMQ og komprimere dem til korte anbefalinger og konklusjoner.

Innholdsfortegnelse

  • RabbitMQ. Del 2. Vi går gjennom Exchanges
  • RabbitMQ. Del 4. Hva er meldinger og rammer?
  • RabbitMQ. Del 3. Vi går gjennom Køer og Bindinger
  • RabbitMQ. Del 4. La oss se nærmere på hva som er meldinger og rammer
  • RabbitMQ. Del 6. Oversikt over modulene Federation og Shovel
  • RabbitMQ. Del 7. Detaljert om Connection og Channel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Overvåking
  • Midlertidige køer

Kort om AMQP

AMQP (Advanced Message Queuing Protocol) – en åpen protokoll for meldingsoverføring mellom systemkomponenter. Hovedideen er at separate undersystemer (eller uavhengige applikasjoner) kan utveksle meldinger på en vilkårlig måte gjennom en AMQP-broker, som utfører ruting, muligens garanterer levering, distribusjon av datastreams, og abonnement på de nødvendige type meldingene.

Protokoll AMQP introducerer tre begreper:

Utgivelse av MyPaint 2.0.0

  • exchange (utvekslingspunkt eller utveksling) – her sendes meldingene. Utvekslingspunktet fordeler meldingen til en eller flere køer. Den ruter meldingene til køen basert på de etablerte forbindelsene (binding) mellom den og køen
  • kø (kø) – en datakonstruksjon på disk eller i RAM, som lagrer referanser til meldinger og gir kopier av meldingene forbrukere (til forbrukere)
  • binding (binding) – en regel som informerer utvekslingspunktet om hvilken av køene meldingene skal sendes til

Protokollen fungerer på toppen av TCP/IP.

Kort om Erlang

Kildekoden til prosjektet finnes i depotet på GitHub. Arkitekturen RabbitMQ-server er basert på Erlang og BEAM.

Erlang er utviklet av selskapet Ericsson på midten av 1980-tallet som et distribuert, feilbestandig sanntidssystem for applikasjoner som krever driftsikkerhet på 99,999%. Erlang brukt i ulike industrier og moderne applikasjoner, for eksempel i WhatsApp. Du kan lese mer i artikkelen arkitekturen til WhatsApp, som Facebook kjøpte for 19 milliarder dollar

Kort om RabbitMQ

RabbitMQ – en meldingsbroker med åpen kildekode. Den rutet meldinger i henhold til alle de grunnleggende prinsippene for protokollen AMQP beskrevet i spesifikasjonen. RabbitMQ implementerer og supplerer protokollen AMQP.

Hovedideen bak meldingsutvekslingsmodellen i RabbitMQ er at producer (utgiver) ikke sender meldinger direkte til køen. I virkeligheten vet ofte ikke utgiveren engang om meldingen vil bli levert til noen kø.

I stedet kan utgiveren kun sende meldinger til en utveksling. På den ene siden får utvekslingen meldinger fra utgivere, og på den andre siden sender den dem til køene. Utvekslingen må vite nøyaktig hva den skal gjøre med den mottatte meldingen. Skal den legges til i en spesifikk kø? Skal den legges til i flere køer? Eller skal meldingen ignoreres?

Utgivelse av MyPaint 2.0.0

Kort oppsummert kan arbeidet RabbitMQ beskrives som følger:

  1. Utgiveren sender en melding til en spesifikk utveksling
  2. Utvekslingen, når den mottar meldingen, rutinerer den til en eller flere køer i henhold til binderegler mellom den og køen
  3. Køen lagrer en referanse til denne meldingen. Selve meldingen lagres i minnet eller på disk
  4. Når forbrukeren er klar til å motta meldingen fra køen, oppretter serveren en kopi av meldingen ved hjelp av referansen og sender den
  5. Forbrukeren mottar meldingen og sender en bekreftelse til megleren
  6. Megleren, etter å ha mottatt bekreftelsen, fjerner kopi av meldingen fra køen. Deretter fjerner den fra minnet og fra disken

RPC

Prosessen RPC (Remote Procedure Call) ligger til grunn for praktisk talt all interaksjon med kjernen RabbitMQ. For eksempel har innledende diskusjoner om vilkårene for klienten med RabbitMQ, demonstrerer en spesifikk prosess RPC. Når denne sekvensen er fullført, RabbitMQ vil være klar til å ta imot forespørsel fra klienten:

Utgivelse av MyPaint 2.0.0

Også i spesifikasjonen AMQP kan både klient og server kalle kommandoer. Dette betyr at klienten forventer interaksjon med serveren. Kommandoer er klasser og metoder. For eksempel, Connection.Start – kaller en metode Start klassen Connection.

Tilslutning og kanaler

For slik informasjonsutveksling mellom klienten og serveren brukes kanaler. Kanaler opprettes innenfor en bestemt tilslutning. Hver kanal er isolert fra andre kanaler. I synkrone tilfeller er det ikke mulig å utføre neste kommando før en respons er mottatt.

For å kunne sende kommandoer parallelt må man åpne flere kanaler. Hver kanal oppretter en egen Erlang prosess. Én tilslutning kan ha mange kanaler (multiplexing). Hver kanal har noen strukturer og objekter i minnet. Derfor, jo flere kanaler som finnes innenfor en tilslutning, jo mer minne bruker RabbitMQ for å håndtere slike tilkoblinger.

Utgivelse av MyPaint 2.0.0

Et enkelt eksempel på opprettelse av tilkobling 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 anbefales på det sterkeste ikke å åpne en ny tilkobling for hver operasjon, da dette vil føre til store kostnader.Kanaler må også være permanente, men mange protokollfeil fører til at kanalen lukkes, så levetiden til kanalen kan være kortere enn tilkoblingen.

Hvor brukes RabbitMQ?

I sammenheng med mikrotjenester brukes protokollen AMQP og dens implementering i RabbitMQ ofte for asynkron kommunikasjon mellom tjenester.

I sammenheng med IIOT protokollen AMQP og dens implementering i RabbitMQ brukes for datadelings mellom servere (server-til-server). Det brukes også en plugin MQTT Plugin RabbitMQ som er en implementering av protokollen MQTT for datatransmisjon mellom sensor og server i lavhastighetsmiljøer med høy forsinkelse (fullstendig liste over støttede protokoller er oppført på prosjektets nettsted).

I neste artikkel begynner vi å se nærmere på Exchanges.

Lenker

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster