RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Hallo Habr! Ik wil een studiehandleiding delen met kennis die ik heb kunnen verzamelen over RabbitMQ en samengeperst in korte aanbevelingen en conclusies.

Inhoudsopgave

  • RabbitMQ. Deel 1. Introductie. Erlang, AMQP en RPC
  • RabbitMQ. Deel 2. Laten we Exchanges verkennen
  • RabbitMQ. Deel 3. Laten we kijken naar Queues en Bindings
  • RabbitMQ. Deel 4. We duiken in wat berichten en frames zijn
  • RabbitMQ. Deel 5. Prestatie van het publiceren en consumeren van berichten
  • RabbitMQ. Deel 6. Overzicht van de modules Federation en Shovel
  • RabbitMQ. Deel 7. Gedetailleerd over Connection en Channel
  • RabbitMQ. Deel 8. RabbitMQ in .NET
  • RabbitMQ. Deel 9. Monitoring

Kort over AMQP

AMQP (Advanced Message Queuing Protocol) is een open protocol voor het verzenden van berichten tussen de componenten van een systeem. Het belangrijkste idee is dat afzonderlijke subsysteem (of onafhankelijke applicaties) berichten op willekeurige wijze kunnen uitwisselen via een AMQP-broker, die routing uitvoert, mogelijk levering garandeert, datastromen distribueert en zich abonneert op de benodigde soorten berichten.

Protocol AMQP introduceert drie concepten:

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

  • exchange (wisselpunt of exchange) - daarin worden berichten verzonden. Het wisselpunt verdeelt het bericht over een of meerdere wachtrijen. Het routet berichten naar de wachtrij op basis van de gemaakte verbindingen (binding) tussen hem en de wachtrij
  • queue (wachtrij) - een gegevenstructuur op de schijf of in het geheugen, die verwijzingen naar berichten opslaat en kopieën van berichten afgeeft consumers (consumenten)
  • binding (binding) - een regel die de wisselpunt vertelt naar welke van die wachtrijen deze berichten zouden moeten gaan

Het protocol werkt bovenop TCP/IP.

Kort over Erlang

De broncode van het project is te vinden in de repository op GitHub. Architectuur RabbitMQ-server is gebaseerd op Erlang en BEAM.

Erlang ontwikkeld door het bedrijf Ericsson in het midden van de jaren 1980 als een gedistribueerd, fouttolerant, real-time systeem voor toepassingen die een ononderbroken werking van 99,999% vereisen. Erlang wordt toegepast in verschillende sectoren en moderne toepassingen, bijvoorbeeld in WhatsApp. Meer details zijn te lezen in het artikel over de architectuur van WhatsApp, dat Facebook kocht voor $19 miljard

Kort over RabbitMQ

RabbitMQ – dit is een broker voor berichten met open bron. Het routeert berichten volgens alle basisprincipes van het protocol AMQP beschreven in de specificatie. RabbitMQ voert en aanvult het protocol AMQP.

Het belangrijkste idee van het berichten-uitwisselingsmodel in RabbitMQ is dat producer (de publisher) verstuurt geen berichten rechtstreeks naar de wachtrij. In feite weet de publisher vaak zelfs niet of een bericht überhaupt aan een wachtrij zal worden bezorgd.

In plaats daarvan kan de publisher berichten alleen naar de broker sturen. Enerzijds ontvangt de broker berichten van publishers, en anderzijds stuurt hij ze naar wachtrijen. De broker moet precies weten wat er met het ontvangen bericht moet gebeuren. Moet het aan een specifieke wachtrij worden toegevoegd? Moet het aan meerdere wachtrijen worden toegevoegd? Of moet het bericht worden genegeerd?

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

De werking RabbitMQ kan als volgt worden samengevat:

  1. De publisher stuurt een bericht naar een bepaalde broker
  2. De broker, nadat hij het bericht heeft ontvangen, routeert het naar een of meer wachtrijen volgens de bindregels tussen hem en de wachtrij.
  3. De wachtrij houdt een referentie naar dit bericht. Het bericht zelf wordt in het geheugen of op de schijf opgeslagen.
  4. Zodra de consument klaar is om een bericht uit de wachtrij te ontvangen, maakt de server een kopie van het bericht op basis van de link en verzendt deze.
  5. De consument ontvangt het bericht en stuurt een bevestiging naar de broker.
  6. De broker verwijdert de kopie van het bericht uit de wachtrij zodra hij de bevestiging heeft ontvangen. Vervolgens verwijdert hij het uit het geheugen en van de schijf.

RPC

Proces RPC (remote procedure call) ligt ten grondslag aan vrijwel alle interacties met de kernel. RabbitMQ. Bijvoorbeeld, de initiële discussies over voorwaarden met de RabbitMQ, illustreert een bepaald proces. RPC. Zodra deze reeks is voltooid, RabbitMQ is hij klaar om verzoeken van de klant te ontvangen:

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Ook in de specificatie AMQP kunnen zowel de client als de server commando's aanroepen. Dit betekent dat de client interactie met de server verwacht. Commando's zijn klassen en methoden. Bijvoorbeeld, Connection.Start – is een aanroep van een methode. Start klasse Verbinden.

Verbinden en kanalen

Voor dit soort informatie-uitwisseling tussen de client en de server worden kanalen. Kanalen worden gecreëerd binnen het kader van een bepaalde verbinding.. Elke kanaal is geïsoleerd van andere kanalen. In het geval van synchronisatie is het niet mogelijk om het volgende commando uit te voeren totdat een antwoord is ontvangen.

Om commando's parallel te kunnen verzenden, moet er meerdere kanalen worden geopend. Elk kanaal creëert een aparte Erlang proces. Eén verbinding kan meerdere kanalen hebben (multiplexing). Voor elk kanaal zijn er bepaalde structuren en objecten in het geheugen. Dus hoe meer kanalen er binnen een verbinding zijn, hoe meer geheugen RabbitMQ gebruikt voor het beheer van zo'n verbinding.

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Een eenvoudig voorbeeld van het maken van een verbinding en kanaal met behulp van 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 
}

Het is ten zeerste af te raden om voor elke operatie een nieuwe verbinding te openen, omdat dit leidt tot hoge kosten. Kanalen moeten ook persistent zijn, maar veel protocolfouten leiden tot het sluiten van een kanaal, waardoor de levensduur van een kanaal korter kan zijn dan die van de verbinding.

Waar wordt RabbitMQ gebruikt?

In de context van microservices wordt het protocol AMQP en de implementatie ervan in RabbitMQ vaak gebruikt voor asynchrone interactie tussen diensten.

In de context van IIOT wordt het protocol AMQP en de implementatie ervan in RabbitMQ gebruikt voor gegevensuitwisseling tussen servers (server-server). De MQTT Plugin RabbitMQ is de implementatie van het protocol voor gegevensoverdracht tussen een sensor en een server in omgevingen met lage snelheid en hoge latentie (een volledige lijst van ondersteunde protocollen staat vermeld in MQTT In het volgende artikel zullen we verder ingaan op Exchanges. de projectwebsite).

Webseite van het RabbitMQ-project

Links

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster