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

Guten Tag, Habr! Ich möchte ein Handbuch teilen, das Wissen zusammenfasst, das ich über RabbitMQ und in kurze Empfehlungen und Schlussfolgerungen komprimiert habe.

Inhaltsverzeichnis

  • RabbitMQ. Teil 1. Einführung. Erlang, AMQP und RPC
  • RabbitMQ. Teil 2. Verständnis der Exchanges
  • RabbitMQ. Teil 3. Verständnis von Queues und Bindings
  • RabbitMQ. Teil 4. Wir klären, was Nachrichten und Frames sind.
  • RabbitMQ. Teil 5. Leistung bei der Veröffentlichung 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. Überwachung

Kurz über AMQP

AMQP (Advanced Message Queuing Protocol) ist ein offenes Protokoll für den Nachrichtenaustausch zwischen Systemkomponenten. Die Hauptidee ist, dass verschiedene Teilsysteme (oder unabhängige Anwendungen) Nachrichten auf beliebige Weise über einen AMQP-Broker austauschen können, der die Nachrichten weiterleitet, möglicherweise die Zustellung garantiert, Datenströme verteilt und die Anmeldung zu den benötigten Nachrichtentypen ermöglicht.

Protokoll AMQP führt drei Konzepte ein:

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

  • exchange (Austausch oder Exchange) — hier werden Nachrichten gesendet. Der Austausch verteilt die Nachricht an eine oder mehrere Warteschlangen. Er leitet Nachrichten an die Warteschlange auf der Grundlage von erstellten Verbindungen (Binding) zwischen ihm und der Warteschlange.
  • queue (Warteschlange) — eine Datenstruktur auf der Festplatte oder im RAM, die Verweise auf Nachrichten speichert und Kopien der Nachrichten Konsumenten an die Verbraucher liefert.
  • Binding (Binding) — eine Regel, die dem Austausch mitteilt, in welche Warteschlangen diese Nachrichten gelangen sollen.

Das Protokoll arbeitet über TCP/IP.

Kurzinformation zu Erlang

Der Quellcode des Projekts ist im Repository unter GitHub. Architektur RabbitMQ-Server basiert auf Erlang und BEAM.

Erlang entwickelt von Ericsson in den 1980er Jahren als verteiltes, fehlertolerantes Echtzeitsystem für Anwendungen, die eine Verfügbarkeit von 99,999 % erfordern. Erlang Es wird in verschiedenen Branchen und modernen Anwendungen eingesetzt, beispielsweise in WhatsApp. Weitere Informationen finden Sie im Artikel die Architektur von WhatsApp, das Facebook für 19 Milliarden Dollar gekauft hat

Kurzinformation zu RabbitMQ

RabbitMQ – ein Open-Source-Nachrichtenbroker. Er leitet Nachrichten nach allen grundlegenden Prinzipien des Protokolls AMQP beschrieben in Spezifikationen. RabbitMQ setzt das Protokoll um und ergänzt es AMQP.

Die Hauptidee des Nachrichtenwechselmodells in RabbitMQ besteht darin, dass der Producer (Publisher) die Nachrichten nicht direkt an die Warteschlange sendet. Tatsächlich weiß der Publisher oft nicht einmal, ob die Nachricht überhaupt in eine Warteschlange zugestellt wird.

Stattdessen kann der Publisher Nachrichten nur an die Warteschlange senden. Einerseits empfängt die Warteschlange Nachrichten von den Publishern, andererseits sendet sie diese an die Warteschlangen. Die Warteschlange muss genau wissen, wie mit der empfangenen Nachricht umzugehen ist. Soll sie in eine bestimmte Warteschlange eingeordnet werden? Soll sie in mehrere Warteschlangen eingeordnet werden? Oder soll die Nachricht ignoriert werden?

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

Die Funktionsweise kann kurz beschrieben werden als: RabbitMQ kann wie folgt beschrieben werden:

  1. Der Publisher sendet eine Nachricht an eine bestimmte Warteschlange
  2. Die Warteschlange, die die Nachricht erhält, leitet sie gemäß den Bindungsregeln zwischen ihr und der Warteschlange in eine oder mehrere Warteschlangen weiter
  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, eine Nachricht aus der Warteschlange zu erhalten, 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, nachdem er die Bestätigung erhalten hat, die Kopie der Nachricht aus der Warteschlange. Danach entfernt er sie aus dem Arbeitsspeicher und von der Festplatte

RPC

Prozess RPC (Remote Procedure Call) liegt nahezu allen Interaktionen mit dem Kernel zugrunde RabbitMQ. Zum Beispiel, die anfänglichen Diskussionen über die Bedingungen des Kunden mit RabbitMQ, demonstriert einen bestimmten Prozess RPC. Sobald diese Abfolge abgeschlossen ist, RabbitMQ wird es bereit sein, Anfragen vom Kunden entgegenzunehmen:

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

In der Spezifikation AMQP können sowohl der Kunde als auch der Server Befehle ausführen. Das bedeutet, dass der Kunde eine Interaktion mit dem Server erwartet. Befehle sind Klassen und Methoden. Zum Beispiel, Connection.Start – der Aufruf der Methode Start der Klasse Verbindung.

Verbindung und Kanäle

Für einen solchen Informationsaustausch zwischen Kunde und Server werden Kanäle. Kanäle werden im Rahmen von einer bestimmten Verbindung. Jeder Kanal ist von anderen Kanälen isoliert. Im synchronen Fall kann der nächste Befehl nicht ausgeführt werden, solange nicht die Antwort erhalten wurde.

Um Befehle parallel senden 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. Daher gilt: Je mehr Kanäle innerhalb einer Verbindung vorhanden sind, desto mehr Speicher benötigt RabbitMQ zur Verwaltung dieser Verbindung.

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

Ein einfaches Beispiel zur Erstellung einer Verbindung und eines Kanals mit Hilfe von 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 hohe Kosten verursachen kann.Kanäle sollten ebenfalls beständig sein, jedoch führen viele Protokollfehler dazu, dass der Kanal geschlossen wird, sodass die Lebensdauer eines Kanals kürzer sein kann als die einer Verbindung.

Wo wird RabbitMQ eingesetzt?

Im Kontext von Mikrodiensten wird das Protokoll AMQP und dessen Implementierung in RabbitMQ häufig für asynchrone Interaktionen zwischen Diensten verwendet.

Im Bereich IIOT Protokoll AMQP und dessen Implementierung in RabbitMQ wird es für den Datenaustausch zwischen Servern (Server-zu-Server) genutzt. Außerdem wird das Plugin MQTT Plugin RabbitMQ verwendet, das eine Implementierung des Protokolls darstellt MQTT zur Datenübertragung zwischen Sensor und Server in niedrigbandbreitigen Umgebungen mit hoher Latenz (eine vollständige Liste der unterstützten Protokolle finden Sie auf Projektwebsite).

Im nächsten Artikel werden wir uns detaillierter mit Exchanges befassen.

Links

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster