{"id":69621,"date":"2020-02-21T02:56:53","date_gmt":"2020-02-20T23:56:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rabbitmq-chast-2-razbiraemsya-s-exchanges"},"modified":"2020-03-03T16:14:48","modified_gmt":"2020-03-03T13:14:48","slug":"rabbitmq-chast-2-razbiraemsya-s-exchanges","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Exchange<\/code> \u2014 Austauschstelle oder Wechselpunkt. Nachrichten werden dorthin gesendet. <code>Exchange<\/code> <strong>verteilt die Nachricht<\/strong> in eine oder mehrere Warteschlangen. Er <strong>leitet Nachrichten an die Warteschlange<\/strong> auf der Grundlage von erstellten Verbindungen (<code>Bindings<\/code>) zwischen ihm und der Warteschlange. <\/p>\n<p><\/p>\n<p><code>Exchange<\/code> kein <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-Prozess<\/a><\/noindex>. Aus Gr\u00fcnden der Skalierbarkeit <code>exchange<\/code> \u2014 ist dies eine Zeichenfolge (Link zu einem Modul mit Code, wo die Logik der Routenf\u00fchrung liegt) in der integrierten Datenbank <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1.000 Austauschstellen verbrauchen insgesamt nur 1 MB Speicher. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Inhaltsverzeichnis<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Teil 1. Einf\u00fchrung. Erlang, AMQP und RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. Teil 3. Verst\u00e4ndnis von Queues und Bindings<\/li>\n<li>RabbitMQ. Teil 4. Was sind Nachrichten und Frames?<\/li>\n<li>RabbitMQ. Teil 5. Leistung bei der Ver\u00f6ffentlichung und dem Konsum von Nachrichten<\/li>\n<li>RabbitMQ. Teil 6. \u00dcberblick \u00fcber die Module Federation und Shovel<\/li>\n<li>RabbitMQ. Teil 7. Detaillierte Informationen zu Verbindung und Kanal<\/li>\n<li>RabbitMQ. Teil 8. RabbitMQ in .NET<\/li>\n<li>RabbitMQ. Teil 9. \u00dcberwachung<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Direct Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Direct exchange<\/code> \u2014 wird verwendet, wenn es notwendig ist, <strong>eine Nachricht an bestimmte Warteschlangen zu liefern.<\/strong>. Die Nachricht wird in der Austauschstelle mit einem bestimmten <strong>Routing-Schl\u00fcssel ver\u00f6ffentlicht<\/strong> und gelangt in alle Warteschlangen, die mit dieser Austauschstelle \u00fcber den gleichen Routing-Schl\u00fcssel verbunden sind. <strong>Der Routing-Schl\u00fcssel ist eine Zeichenfolge<\/strong>. Die \u00dcbereinstimmung erfolgt durch <strong>Pr\u00fcfung von Strings auf \u00c4quivalenz<\/strong>.<\/p>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In <code>rabbitmq<\/code> gibt es das Konzept <strong>Standard-Austauschstelle<\/strong>. Dies ist <code>direct exchange<\/code> ohne Namen. Wenn die Standard-Austauschstelle verwendet wird, wird die Nachricht an eine Warteschlange weitergeleitet, deren Name dem entspricht <strong>Routing-Schl\u00fcssel der Nachricht<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Topic Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Topic exchange<\/code> \u2013 \u00e4hnlich zu <code>direct exchange<\/code> erm\u00f6glicht die selektive Weiterleitung durch den Vergleich des Routing-Schl\u00fcssels. In diesem Fall wird der Schl\u00fcssel jedoch festgelegt <strong>nach einem Muster<\/strong>. Bei der Erstellung eines Musters werden <code>0<\/code> eins oder mehrere W\u00f6rter (Buchstaben <code>AZ<\/code> und <code>az<\/code> und Zahlen <code>0-9<\/code>), getrennt durch Punkte, sowie die Zeichen <code>*<\/code> und <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> kann durch genau <code>1<\/code> Wort <\/li>\n<li><code>#<\/code> ersetzt werden <code>0<\/code> oder mehrere W\u00f6rter <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ab Version <code>RabbitMQ 2.4.0<\/code> der Routing-Algorithmus f\u00fcr <code>topic exchange<\/code> arbeitet bis zu <code>145<\/code> einmal schneller. Dies wurde erreicht durch die Implementierung des Ansatzes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/blog\/2011\/03\/28\/very-fast-and-scalable-topic-routing-part-2\/\">trie implementation<\/a><\/noindex>, der die Darstellung von Mustern in Form einer Baumstruktur vorsieht. Zum Beispiel werden die Muster <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> und <code>b.b.c<\/code> in der folgenden Struktur dargestellt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Muster\u00fcbereinstimmung erfolgt beginnend von der Wurzel und folgt von oben nach unten.<\/p>\n<p><\/p>\n<p>Besonderheiten:<\/p>\n<p><\/p>\n<ul>\n<li>Die Anwendung dieses Austauschtyps k\u00f6nnte ein <strong>gutes Wahl f\u00fcr k\u00fcnftige Entwicklungen der Anwendung sein<\/strong>, da Muster immer so konfiguriert werden k\u00f6nnen, dass die Nachricht \u00e4hnlich wie eine <code>direct exchange<\/code> oder <code>fanout exchange<\/code><\/li>\n<li>mustern, die verwenden <code>*<\/code> <strong>deutlich schneller.<\/strong>, als Muster, die verwenden <code>#<\/code>. <\/li>\n<li><code>topic exchange<\/code> langsamer <code>direct exchange<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"fanout-exchange\"><em>Fanout Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Fanout exchange<\/code> \u2013 <strong>alle Nachrichten werden an alle Warteschlangen zugestellt<\/strong> selbst wenn im Nachricht der Routing-Schl\u00fcssel festgelegt ist.<\/p>\n<p><\/p>\n<p>Besonderheiten:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>funktioniert nicht mit Routing-Schl\u00fcsseln und Vorlagen<\/strong> was sich positiv auf die Leistung auswirkt. Dies ist die schnellste <code>exchange<\/code>;<\/li>\n<li>alle Verbraucher sollten in der Lage sein, alle Nachrichten zu verarbeiten;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/575d86093f151016aef8058fc7d92907.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h4 id=\"headers-exchange\"><em>Headers Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Headers Exchange<\/code> leitet Nachrichten in verwandte Warteschlangen basierend auf dem Vergleich von Paaren (Schl\u00fcssel, Wert) der Eigenschaften <code>headers<\/code> Bindungen und \u00e4hnlichen Eigenschaften der Nachricht. <code>headers<\/code> stellt dar <code>Dictionary<\/code>. <\/p>\n<p><\/p>\n<p>Wenn ein spezieller Schl\u00fcssel zum W\u00f6rterbuch hinzugef\u00fcgt wird <code>x-match<\/code> mit dem Wert <code>any<\/code>, wird die Nachricht bei teilweisem \u00dcbereinstimmen der Paare (Schl\u00fcssel, Wert) weitergeleitet. Dieses Verhalten entspricht dem Operator <code>oder<\/code>. <\/p>\n<p><\/p>\n<pre><code class=\"cs\">var bindingArguments = new Dictinary&lt;String, Object&gt;();\nbindingArguments.add(&quot;x-match&quot;, &quot;any&quot;);<\/code><\/pre>\n<p><\/p>\n<p>Standardm\u00e4\u00dfig enth\u00e4lt der Schl\u00fcssel <code>x-match<\/code> den Wert <code>all<\/code>. Dies bedeutet, dass die Nachricht bei vollst\u00e4ndigem \u00dcbereinstimmen der Paare (Schl\u00fcssel, Wert) weitergeleitet wird. Dieses Verhalten entspricht dem Operator <code>und<\/code>.<\/p>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Besonderheiten:<\/p>\n<p><\/p>\n<ul>\n<li>zus\u00e4tzliche Flexibilit\u00e4t<\/li>\n<li>zus\u00e4tzliche Rechenaufwendungen. Alle Paare (Schl\u00fcssel, Wert) des Attributs <code>headers<\/code> m\u00fcssen vor der Berechnung der Routing-Werte der Nachricht nach dem Schl\u00fcssel sortiert werden. <strong>Langsamer als andere Arten von Exchanges<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"consistent-hashing-exchange\"><em>Consistent-Hashing Exchange<\/em><\/h4>\n<p><\/p>\n<p>Dieser Exchange ist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">ein Plugin<\/a><\/noindex> und <strong>nicht eingebaut<\/strong> in <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-Hashing Exchange<\/code> (Exchange mit vereinbartem Hashing) \u2013 wird verwendet, wenn es mehrere Warteschlangen gibt, die potenzielle Empf\u00e4nger der Nachricht sind und die Last zwischen ihnen ausgeglichen werden muss. Die Verbindung der Nachricht zur Warteschlange erfolgt nach Gewicht (ein bedingter Stringwert von <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Das \u00e4quivalente Gewicht der Warteschlangen \u2013 bedeutet, dass jede Warteschlange <strong>ungef\u00e4hr die gleiche Anzahl<\/strong> von Nachrichten erhalten wird (jede Nachricht wird nur in einer Warteschlange platziert). <strong>Es gibt keine vollst\u00e4ndige Garantie f\u00fcr eine gleichm\u00e4\u00dfige Verteilung der Nachrichten.<\/strong>. <\/p>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> wird basierend auf dem Routing-Schl\u00fcssel oder der Eigenschaft <code>headers<\/code> der Nachricht berechnet. Wenn alle ver\u00f6ffentlichten Nachrichten unterschiedliche Routing-Schl\u00fcssel hatten oder <code>headers<\/code>, erfolgt die Verteilung nach Gewicht. Andernfalls wird der Routing-Schl\u00fcssel verwendet oder <code>headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>Soll helfen, wenn die Durchsatzrate des Verbrauchers h\u00f6her gesteigert werden muss als die L\u00f6sung mit mehreren Verbrauchern, die eine Warteschlange verwenden.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Kombination von Exchanges (E2E)<\/em><\/h4>\n<p><\/p>\n<p>Das Verhalten aller Exchanges kann durch Verbindungen kombiniert werden. <strong>Exchange-to-Exchange<\/strong> (Die Kombination von Exchanges ist nicht Teil der Spezifikation) <code>AMQP<\/code>. Diese Erweiterung des Protokolls auf der Serverseite <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafische Darstellung des Nachrichtenflusses:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Durch <code>E2E<\/code> k\u00f6nnen wir die richtige skalierbare Konfiguration finden, die sowohl aktuellen als auch wachsenden Anforderungen gerecht wird.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Exchange erstellen<\/em><\/h4>\n<p><\/p>\n<p>Die Erstellung eines Exchanges erfolgt mithilfe des synchronen <code>RPC<\/code> Anruf an den Server. Der Aufruf erfolgt \u00fcber die Methode <code>Exchange.Declare<\/code>, die mit den folgenden Parametern aufgerufen wird:<\/p>\n<p><\/p>\n<ul>\n<li>Name des Exchanges<\/li>\n<li>Typ des Exchanges<\/li>\n<li>weitere Parameter<\/li>\n<\/ul>\n<p><\/p>\n<p>Beispiel f\u00fcr die Erstellung <code>exchange<\/code> mit Hilfe von <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/dotnet.html\">RabbitMQ.Client<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"cs\">\/\/...\nchannel.ExchangeDeclare(\n    exchange: &quot;my_exchange&quot;,\n    type: &quot;direct&quot;,\n    durable: &quot;false&quot;,\n    autoDelete: &quot;false&quot;,\n    arguments: null\n);\n\/\/...<\/code><\/pre>\n<p><\/p>\n<ul>\n<li><code>exchange<\/code> \u2014 der Name des Exchanges, den wir erstellen m\u00f6chten. Der Name muss einzigartig sein<\/li>\n<li><code>type<\/code> \u2014 Typ des Exchanges<\/li>\n<li><code>durable<\/code> \u2014 wenn gesetzt <code>true<\/code>, dann <code>exchange<\/code> wird dauerhaft sein. Er wird auf der Festplatte gespeichert und kann einen Neustart des Servers\/Brokers \u00fcberstehen. Wenn der Wert <code>false<\/code>, dann <code>exchange<\/code> vor\u00fcbergehend ist, wird er gel\u00f6scht, wenn der Server\/Broker neu gestartet wird.<\/li>\n<li><code>autoDelete<\/code> \u2014 automatische L\u00f6schung. <code>Exchange<\/code> wird gel\u00f6scht, wenn alle damit verbundenen Warteschlangen gel\u00f6scht werden.<\/li>\n<li><code>Argumente<\/code> \u2014 optionale Argumente. H\u00e4ufig werden \u00fcber die Argumente <code>alternative exchange<\/code> (<strong>alternativer Exchange<\/strong>). Wenn die Nachricht den urspr\u00fcnglichen Weg nicht nehmen kann, kann sie an den alternativen Exchange gesendet werden, um \u00fcber einen anderen Weg geroutet zu werden.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn die Erstellung <code>exchange<\/code> <strong>m\u00f6glich<\/strong>, sendet der Server eine synchrone <code>RPC<\/code> Antwort <code>Exchange.DeclareOk<\/code>. Wenn die Erstellung <strong>nicht erstellt werden kann<\/strong> (Fehler beim Anforderungsauftrag <code>Exchange.Declare<\/code>), dann <strong>wird der Kanal vom Server mit dem Befehl<\/strong> vom Server mittels eines asynchronen Befehls erfolgt. <code>geschlossen und der Client erh\u00e4lt eine Ausnahme<\/code> OperationInterruptedException <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/releases\/rabbitmq-dotnet-client\/v3.6.10\/rabbitmq-dotnet-client-3.6.10-client-htmldoc\/html\/type-RabbitMQ.Client.Exceptions.OperationInterruptedException.html\">, die einen Fehlercode und eine Beschreibung enthalten wird.<\/a><\/noindex>Ein erneuter Aufruf <\/p>\n<p><\/p>\n<p>Der Exchange muss erstellt werden, bevor Nachrichten ver\u00f6ffentlicht werden. Wenn Sie eine Nachricht in einen nicht existierenden Exchange ver\u00f6ffentlichen \u2014 <code>RabbitMQ<\/code> wird sie stillschweigend gel\u00f6scht.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Exchange \u00fcber die grafische Benutzeroberfl\u00e4che erstellen<\/em><\/h4>\n<p><\/p>\n<p>Loggen Sie sich im Administrationsbereich ein <code>RabbitMQ<\/code> mit dem Benutzer <code>guest<\/code> (Benutzername: <code>guest<\/code> und Passwort: <code>guest<\/code>). Beachten Sie, dass sich der Benutzer <code>guest<\/code> nur von localhost aus anmelden kann. Jetzt wechseln wir zum Tab <code>Austausche<\/code> und klicken auf <code>Neuen Exchange hinzuf\u00fcgen<\/code>. Wir f\u00fcllen die Eigenschaften aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verst\u00e4ndnis der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der Gro\u00dfteil der Eigenschaften wurde bereits oben beschrieben. Hier sei angemerkt, dass, wenn Sie <code>Internal<\/code>, der Exchange nur f\u00fcr <code>E2E<\/code>. <code>Producer<\/code> nicht in der Lage sein wird, Nachrichten an diesen Exchange zu senden.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Fazit<\/h3>\n<p><\/p>\n<p>Bei der Entwicklung des Systems ist es praktisch, die Topologie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">der Routing<\/a><\/noindex> mit Hilfe eines Graphen zu beschreiben. Bevor Sie jedoch mit dem Aufbau des Graphen beginnen, sollten Sie die Wege mit hohem Datenverkehr hervorheben, da diese <strong>eine h\u00f6here Bandbreite<\/strong> (Leistung) erfordern. Danach kann der Datenverkehr klassifiziert werden. Und erst dann kann mit dem Aufbau begonnen werden.<\/p>\n<p><\/p>\n<p>Wenn im aufgebauten Graphen eine <strong>endliche Menge<\/strong> von Routing-Schl\u00fcsseln existiert, sollten Sie sich nach mehreren umsehen, <code>fanout exchange<\/code>, die 1:1 mit dem Routing-Schl\u00fcssel verbunden sind. Denken Sie daran, dass <code>fanout exchange<\/code> der schnellste ist.<\/p>\n<p><\/p>\n<p>Wenn die Anzahl der Routen <strong>gegen unendlich strebt,<\/strong>, sollten Sie auf <code>topic exchange<\/code> oder, wenn das Muster nicht ben\u00f6tigt wird, k\u00f6nnen Sie ausw\u00e4hlen <code>direct exchange,<\/code>da dieser schneller ist. <code>topic exchange<\/code>.<\/p>\n<p><\/p>\n<p>Kombinationen verschiedener <code>exchange<\/code> sollten helfen, die richtige zu finden. <strong>skalierbare Konfiguration<\/strong>, die sowohl den aktuellen als auch den wachsenden Anforderungen des Systems gerecht wird.<\/p>\n<p><\/p>\n<p>Anzahl <code>exchange<\/code> und die Anzahl der Warteschlangen im Vergleich zur Anzahl der Routen minimal sein sollte.<\/p>\n<p><\/p>\n<p>Im n\u00e4chsten Artikel werden wir uns eingehender mit Queues und Bindings befassen.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Links<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Die Website des RabbitMQ-Projekts<\/a><\/noindex><\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (bindings) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. Exchange \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 exchange \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438) \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":69622,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-69621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (bindings) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. Exchange \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 exchange \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438) \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47RabbitMQ. \u0427\u0430\u0441\u0442\u044c 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (bindings) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. Exchange \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 exchange \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438) \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-20T23:56:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47RabbitMQ. Teil 2. Verst\u00e4ndnis von Exchanges | ProHoster","description":"Exchange ist ein Austauschpunkt oder eine Schnittstelle. Nachrichten werden an ihn gesendet. Exchange verteilt Nachrichten an eine oder mehrere Warteschlangen. Es leitet Nachrichten an eine Warteschlange basierend auf den erstellten Verbindungen (Bindings) zwischen ihm und der Warteschlange weiter. Exchange ist kein Erlang-Prozess. Aus Gr\u00fcnden der Skalierbarkeit ist ein Exchange eine Zeile (ein Verweis auf das Modul mit dem Code, der die Routing-Logik enth\u00e4lt) in der eingebetteten Datenbank.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47RabbitMQ. \u0427\u0430\u0441\u0442\u044c 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges | ProHoster","og:description":"Exchange \u2014 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. Exchange \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439. \u041e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (bindings) \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. Exchange \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Erlang-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 exchange \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438) \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-20T23:56:53+00:00","article:modified_time":"2020-03-03T13:14:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"69621","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:31:26","updated":"2022-09-28 03:24:29"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}