{"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. Verstehen der Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Austausch<\/code> \u2014 Wechselstube oder Wechselpunkt. Nachrichten werden dorthin gesendet. <code>Austausch<\/code> <strong>verteilt die Nachricht<\/strong> in eine oder mehrere Warteschlangen. Er <strong>leitet Nachrichten anhand von erstellten Verbindungen (<\/strong> Binding<code>Bindings<\/code>) zwischen ihm und der Warteschlange. <\/p>\n<p><\/p>\n<p><code>Austausch<\/code> ist nicht <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">ein Erlang-Prozess<\/a><\/noindex>. Aus Gr\u00fcnden der Skalierbarkeit <code>exchange<\/code> \u2014 dies ist ein String (Verweis auf das Modul mit dem Code, wo die Routing-Logik liegt) in der eingebetteten Datenbank <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1.000 Wechselstuben ben\u00f6tigen insgesamt nur 1 MB Arbeitsspeicher. <\/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. Verstehen der Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. Teil 3. Wir besch\u00e4ftigen uns mit Queues und Bindings<\/li>\n<li>RabbitMQ. Teil 4. Wir kl\u00e4ren, was Nachrichten und Frames sind<\/li>\n<li>RabbitMQ. Teil 5. Leistung bei der Publikation 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. Monitoring<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Direkter Austausch<\/em><\/h4>\n<p><\/p>\n<p><code>Direct Exchange<\/code> \u2014 wird verwendet, wenn es n\u00f6tig ist, <strong>eine Nachricht an bestimmte Warteschlangen zuzustellen<\/strong>. Die Nachricht wird in der Wechselstube mit einem bestimmten <strong>Routing-Schl\u00fcssel<\/strong> ver\u00f6ffentlicht und gelangt in alle Warteschlangen, die mit dieser Wechselstube \u00fcber einen \u00e4hnlichen Routing-Schl\u00fcssel verbunden sind. <strong>Der Routing-Schl\u00fcssel ist ein String<\/strong>. Die \u00dcbereinstimmung wird durch <strong>\u00dcberpr\u00fcfung der Strings auf Gleichheit<\/strong>.<\/p>\n<p><\/p>\n<p>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Im <code>Grafische Darstellung des Nachrichtenflusses:<\/code> rabbitmq <strong>gibt es das Konzept<\/strong>. Es ist <code>Wechselstube<\/code> ohne Namen. Wenn eine Standardwechselstube verwendet wird, wird die Nachricht an die Warteschlange mit dem Namen weitergeleitet, der dem <strong>Routing-Schl\u00fcssel der Nachricht entspricht.<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Themenwechsel<\/em><\/h4>\n<p><\/p>\n<p><code>Topic Exchange<\/code> \u2013 \u00e4hnlich <code>Wechselstube<\/code> erm\u00f6glicht selektives Routing durch Vergleich des Routing-Schl\u00fcssels. In diesem Fall wird der Schl\u00fcssel jedoch <strong>nach einem Muster<\/strong>. Bei der Erstellung eines Musters werden <code>0<\/code> ein oder mehrere W\u00f6rter (Buchstaben <code>AZ<\/code> und <code>az<\/code> und Ziffern <code>0-9<\/code>), getrennt durch einen Punkt, sowie die Zeichen <code>*<\/code> und <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 k\u00f6nnen jeweils ersetzt werden durch genau <code>1<\/code> Wort <\/li>\n<li><code>#<\/code> \u2014 k\u00f6nnen ersetzt werden durch <code>0<\/code> ein oder mehrere W\u00f6rter <\/li>\n<\/ul>\n<p><\/p>\n<p>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Beginnend mit Version <code>RabbitMQ 2.4.0<\/code> wurde der Routing-Algorithmus f\u00fcr <code>den Topic Exchange<\/code> bis zu <code>145<\/code> doppelt so schnell. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/blog\/2011\/03\/28\/very-fast-and-scalable-topic-routing-part-2\/\">Sie erreichten dies durch die Implementierung des<\/a><\/noindex>Trie-Implementierung <code>, die die Darstellung der Muster als Baumstruktur vorsieht. Beispielsweise werden die Muster<\/code>, <code>a.b.c<\/code>, <code>a.*.b.c<\/code> und <code>a.#.c<\/code> b.b.c<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>so dargestellt:<\/p>\n<p><\/p>\n<p>Merkmale:<\/p>\n<p><\/p>\n<ul>\n<li>Die \u00dcbereinstimmung mit dem Muster erfolgt von der Wurzel aus und folgt von oben nach unten. <strong>Die Verwendung dieser Wechselstube kann eine<\/strong>gute Wahl f\u00fcr die m\u00f6gliche zuk\u00fcnftige Entwicklung der Anwendung sein <code>Wechselstube<\/code> oder <code>, da Muster stets so konfiguriert werden k\u00f6nnen, dass die Nachricht analog zu<\/code><\/li>\n<li>Fanout Exchange <code>*<\/code> <strong>viel schneller<\/strong>Muster, die verwenden <code>#<\/code>. <\/li>\n<li><code>den Topic Exchange<\/code> , als Muster, die verwenden <code>Wechselstube<\/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 in alle Warteschlangen geliefert<\/strong> auch wenn der Routing-Schl\u00fcssel in der Nachricht angegeben ist.<\/p>\n<p><\/p>\n<p>Merkmale:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>funktioniert nicht mit Routing-Schl\u00fcsseln und Mustern.<\/strong> was sich positiv auf die Leistung auswirkt. Dies ist der 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>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen 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 an verbundene Warteschlangen basierend auf dem Vergleich von Paaren (Schl\u00fcssel, Wert) von Eigenschaften weiter <code>Headers<\/code> Bindings und \u00e4hnlichen Eigenschaften der Nachricht. <code>Headers<\/code> stellt dar <code>Dictionary<\/code>. <\/p>\n<p><\/p>\n<p>Wenn man dem W\u00f6rterbuch einen speziellen Schl\u00fcssel hinzuf\u00fcgt <code>x-match<\/code> mit dem Wert <code>any<\/code>, wird die Nachricht bei teilweiser \u00dcbereinstimmung der Paare (Schl\u00fcssel, Wert) weitergeleitet. Dieses Verhalten entspricht dem Operator <code>or<\/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>. Das bedeutet, dass die Nachricht bei vollst\u00e4ndiger \u00dcbereinstimmung der Paare (Schl\u00fcssel, Wert) weitergeleitet wird. Dieses Verhalten entspricht dem Operator <code>and<\/code>.<\/p>\n<p><\/p>\n<p>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Merkmale:<\/p>\n<p><\/p>\n<ul>\n<li>zus\u00e4tzliche Flexibilit\u00e4t<\/li>\n<li>zus\u00e4tzliche Rechenkosten. Alle Paare (Schl\u00fcssel, Wert) des Attributs <code>Headers<\/code> m\u00fcssen vor der Berechnung der Werte f\u00fcr die Nachrichtenweiterleitung nach Schl\u00fcsseln 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 ein <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">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 konsistentem Hashing) \u2013 wird verwendet, wenn es mehrere Warteschlangen gibt, die potenzielle Empf\u00e4nger 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 <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Das \u00e4quivalente Gewicht der Warteschlangen bedeutet, dass in jede Warteschlange <strong>ungef\u00e4hr die gleiche Anzahl<\/strong> von Nachrichten kommen wird (jede Nachricht wird nur in eine Warteschlange gelegt). <strong>Es gibt keine vollst\u00e4ndige Garantie f\u00fcr eine gleichm\u00e4\u00dfige Verteilung der Nachrichten.<\/strong>. <\/p>\n<p><\/p>\n<p>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Der 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 oder <code>Headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>Es sollte helfen, wenn die Bandbreite des Verbrauchers st\u00e4rker gesteigert werden muss, als es bei mehreren Verbrauchern der Fall w\u00e4re, 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 \u00fcber <strong>Exchange-to-Exchange<\/strong> (Kombination von Exchanges ist nicht in der Spezifikation enthalten <code>), das einen offenen Standard f\u00fcr den Austausch von Gesch\u00e4ftsnachrichten zwischen Anwendungen oder Organisationen darstellt.<\/code>. Dies ist eine Erweiterung des Protokolls von <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>ermittelt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen 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> Wir k\u00f6nnen die richtige skalierbare Konfiguration finden, die sowohl aktuellen als auch wachsenden Anforderungen entspricht.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Exchange erstellen<\/em><\/h4>\n<p><\/p>\n<p>Die Erstellung eines Exchanges erfolgt durch einen synchronen <code>RPC<\/code> Anruf an den Server. Die Anfrage erfolgt mit der Methode <code>Exchange.Declare<\/code>, die mit den 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 eindeutig sein<\/li>\n<li><code>type<\/code> \u2014 Typ des Exchanges<\/li>\n<li><code>durable<\/code> \u2014 wenn gesetzt ist, <code>true<\/code>, dann <code>exchange<\/code> wird er dauerhaft sein. Er wird auf der Festplatte gespeichert und kann einen Server-\/Broker-Neustart \u00fcberstehen. Wenn der Wert <code>false<\/code>, dann <code>exchange<\/code> vor\u00fcbergehend ist und gel\u00f6scht wird, wenn der Server\/Broker neu gestartet wird<\/li>\n<li><code>autoDelete<\/code> \u2014 automatisches L\u00f6schen. <code>Austausch<\/code> wird gel\u00f6scht, wenn alle damit verbundenen Warteschlangen gel\u00f6scht werden<\/li>\n<li><code>arguments<\/code> \u2014 optionale Argumente. Meistens werden \u00fcber die Argumente <code>alternative exchange<\/code> (<strong>alternativer Exchange<\/strong>). Wenn eine Nachricht den urspr\u00fcnglichen Pfad nicht durchlaufen kann, kann sie an den alternativen Exchange zur Umleitung auf einem anderen Pfad gesendet werden.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen 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>es k\u00f6nnte<\/strong>, dann wird der Server dem Client eine synchrone <code>RPC<\/code> Antwort <code>Exchange.DeclareOk<\/code>. Wenn die Erstellung <strong>nicht m\u00f6glich ist<\/strong> (Die Anfrage wurde abgelehnt <code>Exchange.Declare<\/code>), dann <strong>wird der Kanal vom Server mit einem asynchronen Befehl<\/strong> Channel.Close <code>geschlossen<\/code> und der Client erh\u00e4lt eine Ausnahme <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\">OperationInterruptedException<\/a><\/noindex>, die den Fehlercode und die Beschreibung enth\u00e4lt. <\/p>\n<p><\/p>\n<p>Der Exchange muss vor dem Ver\u00f6ffentlichen von Nachrichten erstellt werden. Wenn Sie eine Nachricht in einen nicht existierenden Exchange ver\u00f6ffentlichen m\u00f6chten \u2014 <code>RabbitMQ<\/code> wird er 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>Melden Sie sich beim Administrationspanel <code>RabbitMQ<\/code> als Benutzer <code>guest<\/code> (Benutzername: <code>guest<\/code> und Passwort: <code>guest<\/code>). Beachten Sie, dass der Benutzer <code>guest<\/code> nur von localhost aus eine Verbindung herstellen kann. Lassen Sie uns nun zur Registerkarte <code>Exchanges<\/code> gehen und auf <code>Neuen Exchange hinzuf\u00fcgen<\/code>. Eigenschaften ausf\u00fcllen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Teil 2. Verstehen der Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die meisten Eigenschaften wurden oben beschrieben. Hier sei erw\u00e4hnt, dass wenn Sie <code>Internal<\/code>, dann kann der Exchange nur f\u00fcr <code>E2E<\/code>. <code>Producer<\/code> kann keine Nachrichten an einen solchen Exchange senden.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Fazit<\/h3>\n<p><\/p>\n<p>Beim Entwerfen eines Systems ist es hilfreich, 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> mithilfe eines Graphen zu beschreiben. Aber bevor Sie beginnen, einen Graphen zu erstellen, sollten Sie die Pfade mit hohem Datenverkehr hervorheben, da diese <strong>eine h\u00f6here Bandbreite ben\u00f6tigen.<\/strong> (Leistung). Danach kann der Datenverkehr klassifiziert werden. Und erst dann kann mit dem Aufbau begonnen werden.<\/p>\n<p><\/p>\n<p>Wenn im erstellten Diagramm <strong>eine endliche Menge<\/strong> von Routing-Schl\u00fcsseln existiert, lohnt es sich, in Richtung mehrerer <code>, da Muster stets so konfiguriert werden k\u00f6nnen, dass die Nachricht analog zu<\/code>, die 1:1 mit dem Routing-Schl\u00fcssel verbunden sind, zu schauen. Denken Sie daran, dass <code>, da Muster stets so konfiguriert werden k\u00f6nnen, dass die Nachricht analog zu<\/code> es der schnellste ist.<\/p>\n<p><\/p>\n<p>Wenn die Anzahl der Routen <strong>gegen unendlich strebt<\/strong>, sollte man auf <code>den Topic Exchange<\/code> oder, wenn die Vorlage nicht ben\u00f6tigt wird, direkt w\u00e4hlen. <code>direct exchange<\/code>, da er schneller ist. <code>den Topic Exchange<\/code>.<\/p>\n<p><\/p>\n<p>Kombinationen verschiedener <code>exchange<\/code> sollte helfen, die richtige <strong>skalierbare Konfiguration<\/strong>, die sowohl den aktuellen als auch den wachsenden Anforderungen des Systems entspricht, zu finden.<\/p>\n<p><\/p>\n<p>Die Anzahl <code>exchange<\/code> und Warteschlangen sollte im Vergleich zur Anzahl der Routen minimal sein.<\/p>\n<p><\/p>\n<p>Im n\u00e4chsten Artikel werden wir uns n\u00e4her mit Warteschlangen und Bindungen besch\u00e4ftigen.<\/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 Projektwebsite RabbitMQ<\/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 5.0.1.1 - 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.\" \/>\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) 5.0.1.1\" \/>\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.\" \/>\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. Wir besch\u00e4ftigen uns mit Exchanges | ProHoster","description":"Exchange \u2013 ein Broker oder ein Punkt des Austausches. Nachrichten werden an ihn gesendet. Exchange verteilt die Nachricht an eine oder mehrere Warteschlangen.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}