RabbitMQ. Del 1. Introduktion. Erlang, AMQP

God eftermiddag, Habr! Jag vill dela med mig av en lärobok-uppslagsbok med kunskap som jag lyckades samla på RabbitMQ och sammanfatta till korta rekommendationer och slutsatser.

innehållsförteckning

  • RabbitMQ. Del 1. Inledning. Erlang, AMQP och RPC
  • RabbitMQ. Del 2. Förstå utbyten
  • RabbitMQ. Del 3. Förstå köer och bindningar
  • RabbitMQ. Del 4. Förstå vad meddelanden och ramar är
  • RabbitMQ. Del 5: Publicera och konsumera meddelandeprestanda
  • RabbitMQ. Del 6. Översikt över Federation och Shovel Modules
  • RabbitMQ. Del 7. Detaljer om Connection och Chanel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Övervakning

Kort om AMQP

AMQP (Advanced Message Queuing Protocol) är ett öppet protokoll för att överföra meddelanden mellan systemkomponenter. Grundtanken är att enskilda delsystem (eller oberoende applikationer) kan utbyta meddelanden på ett godtyckligt sätt genom en AMQP-mäklare, som utför routing, eventuellt garanterar leverans, distribuerar dataströmmar och prenumererar på önskade meddelandetyper.

Protokoll AMQP introducerar tre begrepp:

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

  • exchange (utbytespunkt eller utbyte) - meddelanden skickas till den. Utbytespunkt distribuerar meddelandet i en eller flera köer. Hon dirigerar meddelanden till en kö baserat på skapade länkar (binding) mellan honom och kön
  • queue (kö) - en datastruktur på disk eller i RAM som lagrar länkar till meddelanden och ger kopior av meddelanden consumers (till konsumenter)
  • binding (bindande) - en regel som talar om för utbytespunkten vilken kö dessa meddelanden ska hamna i

Protokollet körs på toppen TCP / IP-.

Kort om Erlang

Projektets källkod finns i arkivet på GitHub. Arkitektur RabbitMQ-server baserat på Erlang och BEAM.

Erlang utvecklat av företaget Ericsson i mitten av 1980-talet som ett distribuerat, feltolerant, realtidssystem för applikationer som kräver 99,999 % drifttid. Erlang används i olika industrier och moderna tillämpningar, t.ex. WhatsApp. Du kan läsa mer i artikeln WhatsApp-arkitekturen, som Facebook köpte för 19 miljarder dollar

Kort om RabbitMQ

RabbitMQ är en meddelandeförmedlare med öppen källkod. Det dirigerar meddelanden längs alla grundläggande principer i protokollet AMQP beskrivs i specifikationer. RabbitMQ implementerar och kompletterar protokollet AMQP.

Huvudidén med meddelandemodellen i RabbitMQ saken är producer (utgivare) skickar inte meddelanden direkt till kön. Faktum är att och ganska ofta, vet utgivaren inte ens om meddelandet kommer att levereras till någon kö alls.

Istället kan utgivaren bara skicka meddelanden till börsen. Å ena sidan tar växeln emot meddelanden från förlag, och å andra sidan skickar den dem till köer. Utbytet måste veta exakt vad det ska göra med meddelandet det får. Ska det läggas till i en specifik kö? Ska det läggas till i flera köer? Eller så bör meddelandet ignoreras.

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Kort arbete RabbitMQ kan beskrivas på följande sätt:

  1. Utgivaren skickar ett meddelande till en specifik börs
  2. En växel, efter att ha tagit emot ett meddelande, dirigerar det till en eller flera köer i enlighet med de bindande reglerna mellan den och kön
  3. Kön lagrar en referens till detta meddelande. Själva meddelandet lagras i RAM eller på disk
  4. När konsumenten är redo att ta emot ett meddelande från kön skapar servern en kopia av meddelandet via en länk och skickar
  5. Konsumenten tar emot meddelandet och skickar bekräftelse till mäklaren
  6. Mäklaren tar, efter att ha fått bekräftelse, bort en kopia av meddelandet från kön. Raderar sedan från RAM och disk

RPC

process RPC (remote procedure call) ligger bakom nästan all interaktion med kärnan RabbitMQ. Till exempel inledande diskussioner om klientens villkor med RabbitMQ, visar en viss process RPC. När denna sekvens är klar, RabbitMQ kommer att vara redo att acceptera förfrågningar från kunden:

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Även i specifikationen AMQP både klienten och servern kan utfärda kommandon. Detta innebär att klienten väntar på att kommunicera med servern. Kommandon är klasser och metoder. Till exempel, Connection.Start – metodanrop Start klass Connection.

Anslutning och kanaler

För sådant informationsutbyte mellan klient och server, kanaler. Kanaler skapas inom specifik anslutning. Varje kanal är isolerad från andra kanaler. I det synkrona fallet är det inte möjligt att utföra nästa kommando förrän ett svar tas emot.

För att kunna skicka kommandon parallellt måste du öppna flera kanaler. Varje kanal skapar en separat Erlang bearbeta. En anslutning kan ha flera kanaler (multiplexering). För varje kanal finns det vissa strukturer och objekt i minnet. Därför, ju fler kanaler det finns inom en anslutning, desto fler kanaler RabbitMQ använder mer minne att hantera en sådan anslutning.

RabbitMQ. Del 1. Introduktion. Erlang, AMQP

Ett enkelt exempel på att skapa en anslutning och kanal med hjälp 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 
}

Att öppna en ny anslutning för varje operation avråds starkt eftersom detta kommer att leda till höga kostnader. Kanaler bör också vara beständiga, men många protokollfel gör att kanalen stängs, så kanalens livslängd kan vara kortare än anslutningens.

Var används RabbitMQ?

I samband med mikrotjänster, protokollet AMQP och dess genomförande i RabbitMQ används ofta för asynkron interaktion mellan tjänsterna.

I sammanhang IIOT protokoll AMQP och dess genomförande i RabbitMQ används för datautbyte mellan servrar (server-server). Använd även plugin MQTT-plugin RabbitMQ som är en implementering av protokollet MQTT för överföring av data mellan sensor och server i låghastighetsmiljöer med hög latens (en fullständig lista över protokoll som stöds finns på projektwebbplats).

I nästa artikel kommer vi att börja förstå Exchanges mer i detalj.

referenser

Källa: will.com

Lägg en kommentar