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

Guten Tag, Habr! Ich möchte ein Lehrbuch-Nachschlagewerk mit dem Wissen teilen, das ich gesammelt habe RabbitMQ und zu kurzen Empfehlungen und Schlussfolgerungen verdichten.

Inhaltsverzeichnis

  • RabbitMQ. Teil 1. Einführung. Erlang, AMQP und RPC
  • RabbitMQ. Teil 2. Austausch verstehen
  • RabbitMQ. Teil 3. Warteschlangen und Bindungen verstehen
  • RabbitMQ. Teil 4. Verstehen, was Nachrichten und Frames sind
  • RabbitMQ. Teil 5: Nachrichtenleistung beim Veröffentlichen und Konsumieren
  • RabbitMQ. Teil 6. Überblick über die Federation- und Shovel-Module
  • RabbitMQ. Teil 7. Details zu Connection und Chanel
  • RabbitMQ. Teil 8. RabbitMQ in .NET
  • RabbitMQ. Teil 9. Überwachung

Kurz über AMQP

AMQP (Advanced Message Queuing Protocol) ist ein offenes Protokoll zur Übertragung von Nachrichten zwischen Systemkomponenten. Die Grundidee besteht darin, dass einzelne Subsysteme (oder unabhängige Anwendungen) Nachrichten auf beliebige Weise über einen AMQP-Broker austauschen können, der das Routing durchführt, möglicherweise die Zustellung garantiert, Datenströme verteilt und die gewünschten Nachrichtentypen abonniert.

Protokoll AMQP stellt drei Konzepte vor:

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

  • exchange (Austauschpunkt oder Austausch) - Nachrichten werden an ihn gesendet. Austauschpunkt verbreitet die Nachricht in einer oder mehreren Warteschlangen. Sie leitet Nachrichten an eine Warteschlange weiter basierend auf erstellten Links (binding) zwischen ihm und der Warteschlange
  • queue (Warteschlange) – eine Datenstruktur auf der Festplatte oder im RAM speichert Links zu Nachrichten und stellt Kopien von Nachrichten bereit consumers (an Verbraucher)
  • binding (verbindlich) - eine Regel, die teilt dem Austauschpunkt mit, in welche Warteschlange diese Nachrichten gelangen sollen

Das Protokoll läuft darüber TCP / IP.

Kurz über Erlang

Der Quellcode des Projekts befindet sich im Repository unter GitHub. Die Architektur RabbitMQ-Server bezogen auf erlang und STRAHL.

Erlang vom Unternehmen entwickelt Ericsson Mitte der 1980er Jahre als verteiltes, fehlertolerantes Echtzeitsystem für Anwendungen, die eine Verfügbarkeit von 99,999 % erfordern. Erlang Wird in verschiedenen Branchen und modernen Anwendungen eingesetzt, z. B. WhatsApp. Mehr können Sie im Artikel lesen WhatsApp-Architektur, die Facebook für 19 Milliarden Dollar gekauft hat

Kurz über RabbitMQ

RabbitMQ ist ein Open-Source-Nachrichtenbroker. Es leitet Nachrichten entlang aller Grundprinzipien des Protokolls weiter AMQP beschrieben in Spezifikationen. RabbitMQ implementiert und ergänzt das Protokoll AMQP.

Die Hauptidee des Messaging-Modells in RabbitMQ die Sache ist producer (Herausgeber) sendet Nachrichten nicht direkt an die Warteschlange. Tatsächlich weiß der Herausgeber häufig nicht einmal, ob die Nachricht überhaupt an eine Warteschlange übermittelt wird.

Stattdessen kann der Herausgeber nur Nachrichten an die Börse senden. Einerseits empfängt die Börse Nachrichten von Herausgebern, andererseits sendet sie diese an Warteschlangen. Die Börse muss genau wissen, was mit der empfangenen Nachricht zu tun ist. Sollte es einer bestimmten Warteschlange hinzugefügt werden? Sollte es zu mehreren Warteschlangen hinzugefügt werden? Oder die Nachricht sollte ignoriert werden.

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

Kurze Arbeit RabbitMQ lässt sich wie folgt beschreiben:

  1. Der Herausgeber sendet eine Nachricht an eine bestimmte Börse
  2. Nachdem eine Vermittlungsstelle eine Nachricht empfangen hat, leitet sie diese gemäß den Bindungsregeln zwischen ihr und der Warteschlange an eine oder mehrere Warteschlangen weiter
  3. Die Warteschlange speichert einen Verweis auf diese Nachricht. Die Nachricht selbst wird im RAM oder auf der Festplatte gespeichert
  4. Sobald der Verbraucher bereit ist, eine Nachricht aus der Warteschlange zu empfangen, erstellt der Server über einen Link eine Kopie der Nachricht und sendet sie
  5. Der Verbraucher erhält die Nachricht und sendet eine Bestätigung an den Broker
  6. Nach Erhalt der Bestätigung entfernt der Broker eine Kopie der Nachricht aus der Warteschlange. Anschließend wird es aus RAM und Festplatte gelöscht

RPC

Prozess RPC (Remoteprozeduraufruf) liegt fast allen Wechselwirkungen mit dem Kern zugrunde RabbitMQ. Zum Beispiel erste Gespräche über die Konditionen des Kunden mit RabbitMQ, demonstriert einen bestimmten Prozess RPC. Sobald diese Sequenz abgeschlossen ist, RabbitMQ ist bereit, Anfragen des Kunden anzunehmen:

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

Auch in der Spezifikation AMQP Sowohl der Client als auch der Server können Befehle erteilen. Das bedeutet, dass der Client auf die Kommunikation mit dem Server wartet. Befehle sind Klassen und Methoden. Zum Beispiel, Connection.Start – Methodenaufruf Start Klasse Connection.

Verbindung und Kanäle

Für einen solchen Informationsaustausch zwischen Client und Server ist Kanäle. Es entstehen Kanäle im Inneren spezifische Verbindung. Jeder Kanal ist von anderen Kanälen isoliert. Im synchronen Fall ist die Ausführung des nächsten Befehls erst nach Erhalt einer Antwort möglich.

Um Befehle parallel senden zu können, müssen Sie mehrere Kanäle öffnen. Jeder Kanal erstellt einen separaten Erlang Verfahren. Eine Verbindung kann mehrere Kanäle haben (Multiplexing). Für jeden Kanal gibt es bestimmte Strukturen und Objekte im Speicher. Je mehr Kanäle es also innerhalb einer Verbindung gibt, desto RabbitMQ benötigt mehr Speicher um eine solche Verbindung zu verwalten.

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

Ein einfaches Beispiel für das Erstellen 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 
}

Aus diesem Grund wird dringend davon abgeraten, für jeden Vorgang eine neue Verbindung zu öffnen wird zu hohen Kosten führen. Kanäle sollten ebenfalls dauerhaft sein, aber viele Protokollfehler führen dazu, dass der Kanal geschlossen wird, sodass die Lebensdauer des Kanals möglicherweise kürzer ist als die der Verbindung.

Wo wird RabbitMQ eingesetzt?

Im Kontext von Microservices das Protokoll AMQP und seine Umsetzung in RabbitMQ oft verwendet für asynchrone Interaktion zwischen Diensten.

Im Kontext IIOT Protokoll AMQP und seine Umsetzung in RabbitMQ Wird für den Datenaustausch zwischen Servern (Server-Server) verwendet. Nutzen Sie auch das Plugin MQTT-Plugin RabbitMQ Das ist eine Implementierung des Protokolls MQTT zur Datenübertragung zwischen Sensor und Server in Umgebungen mit niedriger Geschwindigkeit und hoher Latenz (eine vollständige Liste der unterstützten Protokolle finden Sie unter). Projektseite).

Im nächsten Artikel werden wir beginnen, Exchanges genauer zu verstehen.

Referenzen

Source: habr.com

Kommentar hinzufügen