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:

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 bereitstelltconsumers(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 .
Kurz zu Erlang
Der Quellcode des Projekts befindet sich im Repository auf . Die Architektur basiert auf und BEAM.
Erlangwurde von der FirmaEricssonin den 1980er Jahren entwickelt als verteiltes, fehlertolerantes Echtzeitsystem für Anwendungen, die eine Ausfallsicherheit von 99,999 % erfordern.Erlangwird in verschiedenen Branchen und modernen Anwendungen eingesetzt, beispielsweise in
Kurz zu RabbitMQ
– es handelt sich um einen Open-Source-Nachrichtenbroker. Er leitet Nachrichten gemäß allen grundlegenden Prinzipien des Protokolls beschrieben in . 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.

Die Arbeit RabbitMQ kann folgendermaßen beschrieben werden:
- Der Publisher sendet eine Nachricht an einen bestimmten Austausch.
- Der Austausch routet die empfangene Nachricht entsprechend den Bindungsregeln zwischen ihm und der Warteschlange in eine oder mehrere Warteschlangen.
- Die Warteschlange speichert einen Verweis auf diese Nachricht. Die Nachricht selbst wird im Arbeitsspeicher oder auf der Festplatte gespeichert.
- 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.
- Der Verbraucher erhält die Nachricht und sendet eine Bestätigung an den Broker.
- 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 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:

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 (). 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.

Ein einfaches Beispiel für die Erstellung einer Verbindung und eines Kanals mit :
// ...
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 stellt eine Implementierung des Protokolls dar 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 ).
Im nächsten Artikel gehen wir näher auf Exchanges ein.
Links
Quelle: habr.com
