RabbitMQ. Teil 2. Verstehen der Exchanges

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 ein Erlang-Prozess. 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 mnesia. 1.000 Wechselstuben benötigen insgesamt nur 1 MB Arbeitsspeicher.

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

RabbitMQ. Teil 2. Verstehen der Exchanges

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 genau 1 Wort
  • # — können ersetzt werden durch 0 ein oder mehrere Wörter

ermittelt.

RabbitMQ. Teil 2. Verstehen der Exchanges

Beginnend mit Version RabbitMQ 2.4.0 wurde der Routing-Algorithmus fĂŒr den Topic Exchange bis zu 145 doppelt so schnell. Sie erreichten dies durch die Implementierung desTrie-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

RabbitMQ. Teil 2. Verstehen der Exchanges

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 Wechselstube oder , 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 verwenden Wechselstube

Fanout Exchange

Fanout Exchange – alle Nachrichten werden in alle Warteschlangen geliefert auch wenn der Routing-SchlĂŒssel in der Nachricht angegeben ist.

Besonderheiten:

  • RabbitMQ funktioniert nicht mit Routing-SchlĂŒsseln und Mustern. was sich positiv auf die Leistung auswirkt. Dies ist der schnellste exchange;
  • alle Verbraucher sollten in der Lage sein, alle Nachrichten zu verarbeiten;

ermittelt.

RabbitMQ. Teil 2. Verstehen der Exchanges

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.

RabbitMQ. Teil 2. Verstehen der Exchanges

Besonderheiten:

  • zusĂ€tzliche FlexibilitĂ€t
  • zusĂ€tzliche Rechenkosten. Alle Paare (SchlĂŒssel, Wert) des Attributs Headers mĂŒ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 Plugin 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.

RabbitMQ. Teil 2. Verstehen der Exchanges

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.

RabbitMQ. Teil 2. Verstehen der Exchanges

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 RabbitMQ.Client:

//...
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 sein
  • type — Typ des Exchanges
  • durable — wenn gesetzt ist, true, dann exchange wird er dauerhaft sein. Er wird auf der Festplatte gespeichert und kann einen Server-/Broker-Neustart ĂŒberstehen. Wenn der Wert false, dann exchange vorĂŒbergehend ist und gelöscht wird, wenn der Server/Broker neu gestartet wird
  • autoDelete — automatisches Löschen. Austausch wird gelöscht, wenn alle damit verbundenen Warteschlangen gelöscht werden
  • arguments — optionale Argumente. Meistens werden ĂŒber die Argumente alternative 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.

RabbitMQ. Teil 2. Verstehen der Exchanges

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 OperationInterruptedException, 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:

RabbitMQ. Teil 2. Verstehen der Exchanges

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 der Routing 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

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster