RabbitMQ. Teil 1. Einführung. Erlang, AMQP

Guten Tag, Habr! Ich möchte ein Lehrbuch und Nachschlagewerk teilen, das ich sammeln konnte über RabbitMQ und in kurze Empfehlungen und Schlussfolgerungen komprimiert habe.

Inhaltsverzeichnis

  • RabbitMQ. Teil 1. Einführung. Erlang, AMQP und RPC
  • RabbitMQ. Teil 2. Verstehen der Exchanges
  • RabbitMQ. Teil 3. Wir beschäftigen uns mit Queues und Bindings
  • RabbitMQ. Teil 4. Verständnis von Nachrichten und Frames
  • RabbitMQ. Teil 5. Leistung bei der Publikation und dem Konsum von Nachrichten
  • RabbitMQ. Teil 6. Überblick über die Module Federation und Shovel
  • RabbitMQ. Teil 7. Detaillierte Informationen zu Verbindung und Kanal
  • RabbitMQ. Teil 8. RabbitMQ in .NET
  • RabbitMQ. Teil 9. Monitoring

Kurz zu AMQP

AMQP (Advanced Message Queuing Protocol) — ein offenes Protokoll zur Übertragung von Nachrichten zwischen den Komponenten eines Systems. Die Grundidee ist, dass separate Teilsysteme (oder unabhängige Anwendungen) beliebig Nachrichten über einen AMQP-Broker austauschen können, der das Routing übernimmt, möglicherweise die Zustellung garantiert, Datenströme verteilt und sich für die benötigten Nachrichtentypen registriert.

Protokoll ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt. führt drei Konzepte ein:

RabbitMQ. Teil 1. Einführung. Erlang, AMQP

  • exchange (Austauschpunkt oder Exchange) — dorthin werden Nachrichten gesendet. Der Austauschpunkt verteilt die Nachricht an eine oder mehrere Warteschlangen. Er leitet Nachrichten anhand von erstellten Verbindungen ( Binding) zwischen ihm und der Warteschlange.
  • queue (Warteschlange) — eine Datenstruktur auf der Festplatte oder im Arbeitsspeicher, die Links zu Nachrichten speichert und Kopien der Nachrichten bereitstellt consumers (Kunden)
  • ) zwischen ihm und der Warteschlange (Binding) — eine Regel, die dem Austauschpunkt mitteilt, in welche der Warteschlangen diese Nachrichten gelangen sollen.

Das Protokoll arbeitet über TCP/IP.

Kurz zu Erlang

Der Quellcode des Projekts befindet sich im Repository auf GitHub. Die Architektur RabbitMQ-Server basiert auf Erlang und BEAM.

Erlang wurde von der Firma Ericsson in den 1980er Jahren entwickelt als verteiltes, fehlertolerantes Echtzeitsystem für Anwendungen, die eine Ausfallsicherheit von 99,999 % erfordern. Erlang wird in verschiedenen Branchen und modernen Anwendungen eingesetzt, beispielsweise in WhatsApp. Näheres kann im Artikel über die Architektur von WhatsApp, das Facebook für 19 Milliarden Dollar gekauft hat

Kurz zu RabbitMQ

RabbitMQ – es handelt sich um einen Open-Source-Nachrichtenbroker. Er leitet Nachrichten gemäß allen grundlegenden Prinzipien des Protokolls ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt. beschrieben in Spezifikation. RabbitMQ setzt das Protokoll um und ergänzt es. ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt..

Die Grundidee des Modells für Nachrichtenübertragung in RabbitMQ besteht darin, dass Produzenten (der Publisher) sendet Nachrichten nicht direkt in die Warteschlange. Tatsächlich weiß der Publisher oft nicht einmal, ob eine Nachricht überhaupt in eine Warteschlange zugestellt wird.

Stattdessen kann der Publisher Nachrichten nur an den Austausch senden. Einerseits erhält der Austausch Nachrichten von den Publishern, andererseits sendet er sie in die Warteschlangen. Der Austausch muss genau wissen, was mit der empfangenen Nachricht geschehen soll. Sollte sie in eine bestimmte Warteschlange eingefügt werden? Soll sie in mehrere Warteschlangen eingefügt werden? Oder sollte die Nachricht ignoriert werden.

RabbitMQ. Teil 1. Einführung. Erlang, AMQP

Die Arbeit RabbitMQ kann folgendermaßen beschrieben werden:

  1. Der Publisher sendet eine Nachricht an einen bestimmten Austausch.
  2. Der Austausch routet die empfangene Nachricht entsprechend den Bindungsregeln zwischen ihm und der Warteschlange in eine oder mehrere Warteschlangen.
  3. Die Warteschlange speichert einen Verweis auf diese Nachricht. Die Nachricht selbst wird im Arbeitsspeicher oder auf der Festplatte gespeichert.
  4. Sobald der Verbraucher bereit ist, die Nachricht aus der Warteschlange zu empfangen, erstellt der Server eine Kopie der Nachricht anhand des Verweises und sendet sie.
  5. Der Verbraucher erhält die Nachricht und sendet eine Bestätigung an den Broker.
  6. Der Broker entfernt die Kopie der Nachricht aus der Warteschlange, nachdem er die Bestätigung erhalten hat. Danach wird sie aus dem Arbeitsspeicher und von der Festplatte gelöscht.

RPC

Prozess RPC (Remote Procedure Call) liegt den meisten Interaktionen mit dem Kern zugrunde. RabbitMQ. Zum Beispiel zeigen erste Diskussionen über die Bedingungen des Kunden mit RabbitMQ, einen bestimmten Prozess RPC. Sobald diese Sequenz abgeschlossen ist, RabbitMQ wird bereit sein, Anfragen vom Kunden entgegenzunehmen:

RabbitMQ. Teil 1. Einführung. Erlang, AMQP

Auch in der Spezifikation ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt. können sowohl der Client als auch der Server Befehle aufrufen. Das bedeutet, dass der Client eine Interaktion mit dem Server erwartet. Befehle sind Klassen und Methoden. Zum Beispiel Connection.Start – Aufruf der Methode Start Klasse Verbindung.

Verbindung und Kanäle

Für den Informationsaustausch zwischen Client und Server werden Kanäleverwendet. Kanäle werden im Rahmen einer bestimmten Verbindungerstellt. Jeder Kanal ist von anderen Kanälen isoliert. Im synchronen Fall ist es nicht möglich, den nächsten Befehl auszuführen, solange keine Antwort erhalten wurde.

Um Befehle parallel versenden zu können, müssen mehrere Kanäle geöffnet werden. Jeder Kanal erzeugt einen separaten Erlang Prozess. Eine Verbindung kann viele Kanäle haben (Multiplexing). Für jeden Kanal gibt es bestimmte Strukturen und Objekte im Speicher. Je mehr Kanäle innerhalb einer Verbindung existieren, desto mehr Speicher nutzt RabbitMQ zur Verwaltung einer solchen Verbindung.

RabbitMQ. Teil 1. Einführung. Erlang, AMQP

Ein einfaches Beispiel für die Erstellung einer Verbindung und eines Kanals mit 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 
}

Es wird dringend davon abgeraten, für jede Operation eine neue Verbindung zu öffnen, da dies zu hohen Kosten führen wird. Kanäle sollten ebenfalls dauerhaft sein, aber viele Protokollfehler führen zur Schließung des Kanals, sodass die Lebensdauer eines Kanals kürzer sein kann als die einer Verbindung.

Wo wird RabbitMQ eingesetzt?

Im Kontext von Mikrodiensten wird das Protokoll ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt. und seine Implementierung in RabbitMQ häufig für asynchrone Interaktionen zwischen Diensten verwendet.

Im Kontext von IIOT wird das Protokoll ), das einen offenen Standard für den Austausch von Geschäftsnachrichten zwischen Anwendungen oder Organisationen darstellt. und seine Implementierung in RabbitMQ zum Datenaustausch zwischen Servern (Server-zu-Server) genutzt. Das Plugin MQTT Plugin RabbitMQ stellt eine Implementierung des Protokolls dar MQTT für die Übertragung von Daten zwischen Sensor und Server in Niederstgeschwindigkeitsumgebungen mit hoher Latenz (eine vollständige Liste der unterstützten Protokolle finden Sie auf der Projektwebsite).

Im nächsten Artikel gehen wir näher auf Exchanges ein.

Links

Quelle: habr.com

60GB SSD 8Gb DDR4