Austausch â Wechselstube oder Wechselpunkt. Nachrichten werden dorthin gesendet. Austausch verteilt die Nachricht in eine oder mehrere Warteschlangen. Er leitet Nachrichten anhand von erstellten Verbindungen ( BindingBindings) zwischen ihm und der Warteschlange.
Austausch ist nicht . Aus GrĂŒnden der Skalierbarkeit exchange â dies ist ein String (Verweis auf das Modul mit dem Code, wo die Routing-Logik liegt) in der eingebetteten Datenbank . 1.000 Wechselstuben benötigen insgesamt nur 1 MB Arbeitsspeicher.
Inhaltsverzeichnis
- RabbitMQ. Teil 3. Wir beschÀftigen uns mit Queues und Bindings
- RabbitMQ. Teil 4. Wir klÀren, was Nachrichten und Frames sind
- 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
Direkter Austausch
Direct Exchange â wird verwendet, wenn es nötig ist, eine Nachricht an bestimmte Warteschlangen zuzustellen. Die Nachricht wird in der Wechselstube mit einem bestimmten Routing-SchlĂŒssel veröffentlicht und gelangt in alle Warteschlangen, die mit dieser Wechselstube ĂŒber einen Ă€hnlichen Routing-SchlĂŒssel verbunden sind. Der Routing-SchlĂŒssel ist ein String. Die Ăbereinstimmung wird durch ĂberprĂŒfung der Strings auf Gleichheit.
ermittelt.

Im Grafische Darstellung des Nachrichtenflusses: rabbitmq gibt es das Konzept. Es ist Wechselstube ohne Namen. Wenn eine Standardwechselstube verwendet wird, wird die Nachricht an die Warteschlange mit dem Namen weitergeleitet, der dem Routing-SchlĂŒssel der Nachricht entspricht..
Themenwechsel
Topic Exchange â Ă€hnlich Wechselstube ermöglicht selektives Routing durch Vergleich des Routing-SchlĂŒssels. In diesem Fall wird der SchlĂŒssel jedoch nach einem Muster. Bei der Erstellung eines Musters werden 0 ein oder mehrere Wörter (Buchstaben AZ und az und Ziffern 0-9), getrennt durch einen Punkt, sowie die Zeichen * und #.
*â können jeweils ersetzt werden durch genau1Wort#â können ersetzt werden durch0ein oder mehrere Wörter
ermittelt.

Beginnend mit Version RabbitMQ 2.4.0 wurde der Routing-Algorithmus fĂŒr den Topic Exchange bis zu 145 doppelt so schnell. Trie-Implementierung , die die Darstellung der Muster als Baumstruktur vorsieht. Beispielsweise werden die Muster, a.b.c, a.*.b.c und a.#.c b.b.c

so dargestellt:
Besonderheiten:
- Die Ăbereinstimmung mit dem Muster erfolgt von der Wurzel aus und folgt von oben nach unten. Die Verwendung dieser Wechselstube kann einegute Wahl fĂŒr die mögliche zukĂŒnftige Entwicklung der Anwendung sein
Wechselstubeoder, da Muster stets so konfiguriert werden können, dass die Nachricht analog zu - Fanout Exchange
*viel schnellerMuster, die verwenden#. den Topic Exchange, als Muster, die verwendenWechselstube
Fanout Exchange
Fanout Exchange â alle Nachrichten werden in alle Warteschlangen geliefert auch wenn der Routing-SchlĂŒssel in der Nachricht angegeben ist.
Besonderheiten:
RabbitMQfunktioniert nicht mit Routing-SchlĂŒsseln und Mustern. was sich positiv auf die Leistung auswirkt. Dies ist der schnellsteexchange;- alle Verbraucher sollten in der Lage sein, alle Nachrichten zu verarbeiten;
ermittelt.

Headers Exchange
Headers exchange leitet Nachrichten an verbundene Warteschlangen basierend auf dem Vergleich von Paaren (SchlĂŒssel, Wert) von Eigenschaften weiter Headers Bindings und Ă€hnlichen Eigenschaften der Nachricht. Headers stellt dar Dictionary.
Wenn man dem Wörterbuch einen speziellen SchlĂŒssel hinzufĂŒgt x-match mit dem Wert any, wird die Nachricht bei teilweiser Ăbereinstimmung der Paare (SchlĂŒssel, Wert) weitergeleitet. Dieses Verhalten entspricht dem Operator or.
var bindingArguments = new Dictinary();
bindingArguments.add("x-match", "any");StandardmĂ€Ăig enthĂ€lt der SchlĂŒssel x-match den Wert all. Das bedeutet, dass die Nachricht bei vollstĂ€ndiger Ăbereinstimmung der Paare (SchlĂŒssel, Wert) weitergeleitet wird. Dieses Verhalten entspricht dem Operator and.
ermittelt.

Besonderheiten:
- zusÀtzliche FlexibilitÀt
- zusĂ€tzliche Rechenkosten. Alle Paare (SchlĂŒssel, Wert) des Attributs
HeadersmĂŒssen vor der Berechnung der Werte fĂŒr die Nachrichtenweiterleitung nach SchlĂŒsseln sortiert werden. Langsamer als andere Arten von Exchanges.
Consistent-Hashing Exchange
Dieser Exchange ist ein und nicht eingebaut in RabbitMQ.
Consistent-hashing exchange (Exchange mit konsistentem Hashing) â wird verwendet, wenn es mehrere Warteschlangen gibt, die potenzielle EmpfĂ€nger der Nachricht sind, und wenn die Last zwischen ihnen ausgewogen werden soll. Die Zuordnung der Nachricht zur Warteschlange erfolgt nach Gewicht (ein bedingter stringwert von 0 - n).
Das Ă€quivalente Gewicht der Warteschlangen bedeutet, dass in jede Warteschlange ungefĂ€hr die gleiche Anzahl von Nachrichten kommen wird (jede Nachricht wird nur in eine Warteschlange gelegt). Es gibt keine vollstĂ€ndige Garantie fĂŒr eine gleichmĂ€Ăige Verteilung der Nachrichten..
ermittelt.

Der Hash wird basierend auf dem Routing-SchlĂŒssel oder der Eigenschaft Headers der Nachricht berechnet. Wenn alle veröffentlichten Nachrichten unterschiedliche Routing-SchlĂŒssel hatten oder Headers, erfolgt die Verteilung nach Gewicht. Andernfalls wird der Routing-SchlĂŒssel oder Headers.
Es sollte helfen, wenn die Bandbreite des Verbrauchers stÀrker gesteigert werden muss, als es bei mehreren Verbrauchern der Fall wÀre, die eine Warteschlange verwenden.
Kombination von Exchanges (E2E)
Das Verhalten aller Exchanges kann ĂŒber Exchange-to-Exchange (Kombination von Exchanges ist nicht in der Spezifikation enthalten ), das einen offenen Standard fĂŒr den Austausch von GeschĂ€ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.. Dies ist eine Erweiterung des Protokolls von RabbitMQ).
ermittelt.

Durch E2E Wir können die richtige skalierbare Konfiguration finden, die sowohl aktuellen als auch wachsenden Anforderungen entspricht.
Exchange erstellen
Die Erstellung eines Exchanges erfolgt durch einen synchronen RPC Anruf an den Server. Die Anfrage erfolgt mit der Methode Exchange.Declare, die mit den Parametern aufgerufen wird:
- Name des Exchanges
- Typ des Exchanges
- weitere Parameter
Beispiel fĂŒr die Erstellung exchange mit Hilfe von :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchangeâ der Name des Exchanges, den wir erstellen möchten. Der Name muss eindeutig seintypeâ Typ des Exchangesdurableâ wenn gesetzt ist,true, dannexchangewird er dauerhaft sein. Er wird auf der Festplatte gespeichert und kann einen Server-/Broker-Neustart ĂŒberstehen. Wenn der Wertfalse, dannexchangevorĂŒbergehend ist und gelöscht wird, wenn der Server/Broker neu gestartet wirdautoDeleteâ automatisches Löschen.Austauschwird gelöscht, wenn alle damit verbundenen Warteschlangen gelöscht werdenargumentsâ optionale Argumente. Meistens werden ĂŒber die Argumentealternative exchange(alternativer Exchange). Wenn eine Nachricht den ursprĂŒnglichen Pfad nicht durchlaufen kann, kann sie an den alternativen Exchange zur Umleitung auf einem anderen Pfad gesendet werden.

Wenn die Erstellung exchange es könnte, dann wird der Server dem Client eine synchrone RPC Antwort Exchange.DeclareOk. Wenn die Erstellung nicht möglich ist (Die Anfrage wurde abgelehnt Exchange.Declare), dann wird der Kanal vom Server mit einem asynchronen Befehl Channel.Close geschlossen und der Client erhÀlt eine Ausnahme , die den Fehlercode und die Beschreibung enthÀlt.
Der Exchange muss vor dem Veröffentlichen von Nachrichten erstellt werden. Wenn Sie eine Nachricht in einen nicht existierenden Exchange veröffentlichen möchten â RabbitMQ wird er stillschweigend gelöscht.
Exchange ĂŒber die grafische BenutzeroberflĂ€che erstellen
Melden Sie sich beim Administrationspanel RabbitMQ als Benutzer guest (Benutzername: guest und Passwort: guest). Beachten Sie, dass der Benutzer guest nur von localhost aus eine Verbindung herstellen kann. Lassen Sie uns nun zur Registerkarte Exchanges gehen und auf Neuen Exchange hinzufĂŒgen. Eigenschaften ausfĂŒllen:

Die meisten Eigenschaften wurden oben beschrieben. Hier sei erwĂ€hnt, dass wenn Sie Internal, dann kann der Exchange nur fĂŒr E2E. Producer kann keine Nachrichten an einen solchen Exchange senden.
Fazit
Beim Entwerfen eines Systems ist es hilfreich, die Topologie mithilfe eines Graphen zu beschreiben. Aber bevor Sie beginnen, einen Graphen zu erstellen, sollten Sie die Pfade mit hohem Datenverkehr hervorheben, da diese eine höhere Bandbreite benötigen. (Leistung). Danach kann der Datenverkehr klassifiziert werden. Und erst dann kann mit dem Aufbau begonnen werden.
Wenn im erstellten Diagramm eine endliche Menge von Routing-SchlĂŒsseln existiert, lohnt es sich, in Richtung mehrerer , da Muster stets so konfiguriert werden können, dass die Nachricht analog zu, die 1:1 mit dem Routing-SchlĂŒssel verbunden sind, zu schauen. Denken Sie daran, dass , da Muster stets so konfiguriert werden können, dass die Nachricht analog zu es der schnellste ist.
Wenn die Anzahl der Routen gegen unendlich strebt, sollte man auf den Topic Exchange oder, wenn die Vorlage nicht benötigt wird, direkt wÀhlen. direct exchange, da er schneller ist. den Topic Exchange.
Kombinationen verschiedener exchange sollte helfen, die richtige skalierbare Konfiguration, die sowohl den aktuellen als auch den wachsenden Anforderungen des Systems entspricht, zu finden.
Die Anzahl exchange und Warteschlangen sollte im Vergleich zur Anzahl der Routen minimal sein.
Im nÀchsten Artikel werden wir uns nÀher mit Warteschlangen und Bindungen beschÀftigen.
Links
Quelle: habr.com
