{"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\/nl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Deel 2. Laten we Exchanges verkennen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Exchange<\/code> \u2014 wisselaar of uitwisselingspunt. Hierin worden berichten verzonden. <code>Exchange<\/code> <strong>verdeelt het bericht<\/strong> in \u00e9\u00e9n of meerdere wachtrijen. Hij <strong>routet berichten naar de wachtrij<\/strong> op basis van de gemaakte verbindingen (<code>bindings<\/code>) tussen hem en de wachtrij. <\/p>\n<p><\/p>\n<p><code>Exchange<\/code> niet is <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-proces<\/a><\/noindex>. Vanuit schaalbaarheidsoptiek <code>exchange<\/code> \u2014 dit is een string (link naar de module met code waarin de routeringslogica ligt) in de ingebouwde database <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 duizend wisselaars verbruiken slechts 1MB geheugen. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Inhoudsopgave<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Deel 1. Introductie. Erlang, AMQP en RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Deel 2. Laten we Exchanges verkennen<\/a><\/noindex><\/li>\n<li>RabbitMQ. Deel 3. Laten we kijken naar Queues en Bindings<\/li>\n<li>RabbitMQ. Deel 4. Laten we kijken wat berichten en frames zijn<\/li>\n<li>RabbitMQ. Deel 5. Prestatie van het publiceren en consumeren van berichten<\/li>\n<li>RabbitMQ. Deel 6. Overzicht van de modules Federation en Shovel<\/li>\n<li>RabbitMQ. Deel 7. Gedetailleerd over Connection en Channel<\/li>\n<li>RabbitMQ. Deel 8. RabbitMQ in .NET<\/li>\n<li>RabbitMQ. Deel 9. Monitoring<\/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 wordt gebruikt wanneer het nodig is <strong>om een bericht aan specifieke wachtrijen te bezorgen<\/strong>. Het bericht wordt gepubliceerd in de wisselaar met een bepaalde <strong>routeringssleutel<\/strong> en komt in alle wachtrijen die met deze wisselaar zijn verbonden met dezelfde routeringssleutel. <strong>Routeringssleutel \u2014 dit is een string<\/strong>. Het zoeken naar overeenstemming gebeurt door middel van <strong>stringvergelijkingen<\/strong>.<\/p>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In <code>rabbitmq<\/code> er is het begrip <strong>standaardwisselaar<\/strong>. Dit is <code>direct exchange<\/code> zonder naam. Als de standaardwisselaar wordt gebruikt, zal het bericht worden gerouteerd naar de wachtrij met de naam gelijk aan <strong>de routeringssleutel van het bericht<\/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 soortgelijk <code>direct exchange<\/code> biedt de mogelijkheid om geselecteerde routering uit te voeren door de routeringssleutel te vergelijken. Maar in dit geval wordt de sleutel ingesteld <strong>door een patroon<\/strong>. Bij het maken van een patroon worden <code>0<\/code> \u00e9\u00e9n of meer woorden (letters <code>AZ<\/code> en <code>az<\/code> en cijfers <code>0-9<\/code>), gescheiden door punten, evenals symbolen <code>*<\/code> en <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 kan worden vervangen door precies <code>1<\/code> woord <\/li>\n<li><code>#<\/code> \u2014 kan worden vervangen door <code>0<\/code> \u00e9\u00e9n of meer woorden <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Beginnend vanaf versie <code>RabbitMQ 2.4.0<\/code> de routeringsalgoritme voor <code>topic exchange<\/code> werkte tot <code>145<\/code> tien keer sneller. Ze hebben dit bereikt door de aanpak <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>, die de representatie van patronen in de vorm van een boomstructuur inhoudt. Bijvoorbeeld de patronen <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> en <code>b.b.c<\/code> zullen als volgt worden gepresenteerd:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Het zoeken naar overeenstemming met het patroon begint vanaf de wortel en gaat van boven naar beneden.<\/p>\n<p><\/p>\n<p>Kenmerken:<\/p>\n<p><\/p>\n<ul>\n<li>het gebruik van deze wisselaar kan <strong>een goede keuze zijn voor mogelijke toekomstige ontwikkeling van de applicatie<\/strong>, aangezien patronen altijd kunnen worden geconfigureerd om het bericht op vergelijkbare wijze te publiceren. <code>direct exchange<\/code> of <code>fanout exchange<\/code><\/li>\n<li>patronen die gebruiken <code>*<\/code> <strong>veel sneller<\/strong>, dan patronen die gebruiken <code>#<\/code>. <\/li>\n<li><code>topic exchange<\/code> trager <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 berichten worden afgeleverd aan alle wachtrijen<\/strong> zelfs als er een routeringssleutel in het bericht is opgegeven.<\/p>\n<p><\/p>\n<p>Kenmerken:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>werkt niet met routeringssleutels en patronen<\/strong> wat een positieve invloed heeft op de prestaties. Dit is de snelste <code>exchange<\/code>;<\/li>\n<li>alle gebruikers moeten in staat zijn om alle berichten te verwerken;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" 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> stelt berichten in staat om naar gerelateerde wachtrijen te worden gestuurd op basis van het vergelijken van paren (sleutel, waarde) eigenschappen <code>headers<\/code> bindingen en een soortgelijke eigenschap van het bericht. <code>headers<\/code> is <code>Dictionary&lt;sleutel, waarde&gt;<\/code>. <\/p>\n<p><\/p>\n<p>Als een speciale sleutel aan de woordenlijst wordt toegevoegd <code>x-match<\/code> met de waarde <code>any<\/code>, dan wordt het bericht gerouteerd bij gedeeltelijke overeenstemming van paren (sleutel, waarde). Dit gedrag is vergelijkbaar met de operator <code>or<\/code>. <\/p>\n<p><\/p>\n<pre><code class=\"cs\">var bindingArguments = new Dictinary();\nbindingArguments.add(\"x-match\", \"any\");<\/code><\/pre>\n<p><\/p>\n<p>Standaard bevat de sleutel <code>x-match<\/code> de waarde <code>all<\/code>. Dit betekent dat het bericht wordt gerouteerd bij volledige overeenstemming van paren (sleutel, waarde). Dit gedrag is vergelijkbaar met de operator <code>en<\/code>.<\/p>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kenmerken:<\/p>\n<p><\/p>\n<ul>\n<li>extra flexibiliteit<\/li>\n<li>aanvullende rekenkosten. Alle paren (sleutel, waarde) van het attribuut <code>headers<\/code> moeten op naam van de sleutel worden gesorteerd v\u00f3\u00f3r het berekenen van de routering van het bericht. <strong>Langzamer dan andere soorten exchange<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"consistent-hashing-exchange\"><em>Consistent-Hashing Exchange<\/em><\/h4>\n<p><\/p>\n<p>Deze exchange is <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">een plugin<\/a><\/noindex> en <strong>niet ingebouwd<\/strong> in <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (exchange met consistente hashing) \u2013 wordt gebruikt wanneer er verschillende wachtrijen zijn die potenti\u00eble ontvangers van het bericht zijn, en wanneer de belasting tussen hen moet worden gebalanceerd. De verbinding van het bericht met de wachtrij gebeurt op basis van gewicht (een voorwaardelijke tekenreekswaarde van <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Equivalent gewicht van de wachtrijen \u2013 geeft aan dat elk van de wachtrijen ongeveer hetzelfde aantal <strong>berichten zal ontvangen (elk bericht zal slechts in \u00e9\u00e9n wachtrij worden geplaatst).<\/strong> Er is geen volledige garantie voor een gelijkmatige verdeling van berichten <strong>Hash<\/strong>. <\/p>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>wordt berekend op basis van de routeringssleutel of eigenschap<\/code> van het bericht. Als alle gepubliceerde berichten verschillende routeringssleutels hadden of <code>headers<\/code> , dan zal de verdeling op basis van gewicht plaatsvinden. Anders zal de routeringssleutel of <code>headers<\/code>Moet helpen wanneer de bandbreedte van de consument meer moet groeien dan de oplossing met meerdere consumenten die dezelfde wachtrij gebruiken. <code>headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>Combinatie van exchanges (E2E)<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Het gedrag van alle exchanges kan worden gecombineerd met behulp van verbinding<\/em><\/h4>\n<p><\/p>\n<p>Exchange-to-Exchange <strong>(de combinatie van exchanges valt niet onder de specificatie<\/strong> . Dit is een protocoluitbreiding aan de zijde van <code>AMQP<\/code>Door middel van <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafische weergave van de berichtenstroom:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E2E <code>E2E<\/code> we kunnen de juiste schaalbare configuratie vinden die voldoet aan zowel de huidige als de groeiende eisen.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Exchange cre\u00ebren<\/em><\/h4>\n<p><\/p>\n<p>Het cre\u00ebren van een exchange gebeurt via een synchronisatie <code>RPC<\/code> verzoek aan de server. Het verzoek wordt gedaan met behulp van de methode <code>Exchange.Declare<\/code>, aangeroepen met de parameters:<\/p>\n<p><\/p>\n<ul>\n<li>naam van de exchange<\/li>\n<li>type exchange<\/li>\n<li>andere parameters<\/li>\n<\/ul>\n<p><\/p>\n<p>Voorbeeld van aanmaak <code>exchange<\/code> met behulp van <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 de naam van de exchange die we willen cre\u00ebren. De naam moet uniek zijn<\/li>\n<li><code>type<\/code> \u2014 type exchange<\/li>\n<li><code>duurable<\/code> \u2014 als ingesteld <code>true<\/code>, dan <code>exchange<\/code> zal permanent zijn. Het zal op de schijf worden opgeslagen en kan een server\/broker herstart overleven. Als de waarde <code>false<\/code>, dan <code>exchange<\/code> tijdelijk is, wordt het verwijderd wanneer de server\/broker opnieuw opstart<\/li>\n<li><code>autoDelete<\/code> \u2014 automatische verwijdering. <code>Exchange<\/code> het wordt verwijderd wanneer alle gerelateerde wachtrijen worden verwijderd<\/li>\n<li><code>arguments<\/code> \u2014 optionele argumenten. Meestal worden via argumenten <code>alternative exchange<\/code> (<strong>alternatieve exchange<\/strong>). Als een bericht niet via de oorspronkelijke route kan, kan het naar de alternatieve exchange worden gestuurd voor routering via een andere weg.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Als het cre\u00ebren <code>exchange<\/code> <strong>mogelijk<\/strong>, zal de server een synchronisatie <code>RPC<\/code> op de kritiek van het gebruik van advertentieblokker als middel om persoonlijke conflicten op te lossen en druk uit te oefenen op gebruikers, verklaarde ontwikkelaar dimisa <code>Exchange.DeclareOk<\/code>verzenden. Als het cre\u00ebren <strong>onmogelijk is<\/strong> (er was een fout bij het verzoek <code>Exchange.Declare<\/code>), dan <strong>zal de kanaal sluiten<\/strong> door de server met behulp van een asynchrone opdracht <code>Channel.Close<\/code> en de client ontvangt een uitzondering <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 de foutcode en de omschrijving zal bevatten. <\/p>\n<p><\/p>\n<p>De exchange moet zijn aangemaakt voordat berichten worden gepubliceerd. Als je een bericht publiceert naar een niet-bestaande exchange \u2014 <code>RabbitMQ<\/code> zult het stil worden verwijderd.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Exchange cre\u00ebren via de grafische interface<\/em><\/h4>\n<p><\/p>\n<p>Ga naar het beheerderspaneel <code>RabbitMQ<\/code> onder gebruikersnaam <code>gast;<\/code> (username: <code>gast;<\/code> en password: <code>gast;<\/code>). Let op dat de gebruiker <code>gast;<\/code> alleen vanaf de lokale host kan verbinden. Laten we nu naar het tabblad <code>Exchanges<\/code> gaan en op de <code>Add a new exchange<\/code>. Vul de eigenschappen in:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Deel 2. Laten we Exchanges verkennen\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Het merendeel van de eigenschappen is hierboven beschreven. Hier moeten we opmerken dat als je <code>Intern<\/code>, de exchange alleen gebruikt kan worden voor <code>E2E<\/code>. <code>Producer<\/code> kan geen berichten naar zo'n exchange sturen.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Conclusie<\/h3>\n<p><\/p>\n<p>Bij het ontwikkelen van een systeem is het handig de 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\">van routering<\/a><\/noindex> te beschrijven met behulp van een grafiek. Maar voordat je begint met het bouwen van de grafiek, is het het beste om de drukke paden te identificeren, aangezien zij <strong>hogere doorvoer vereisen.<\/strong> (prestaties). Vervolgens kan het verkeer gecategoriseerd worden. En pas daarna kan begonnen worden met de opbouw.<\/p>\n<p><\/p>\n<p>Als er in de gebouwde grafiek <strong>een eindige hoeveelheid<\/strong> routeringssleutels bestaat, dan is het de moeite waard om naar meerdere <code>fanout exchange<\/code>, die 1:1 gekoppeld zijn aan de routeringssleutel, te kijken. Onthoud dat <code>fanout exchange<\/code> de snelste is.<\/p>\n<p><\/p>\n<p>Als het aantal routes <strong>naar oneindigheid neigt<\/strong>, is het de moeite waard om aandacht te besteden aan <code>topic exchange<\/code> of, als het sjabloon niet nodig is, kan men kiezen voor <code>directe uitwisseling<\/code>, aangezien deze sneller is. <code>topic exchange<\/code>.<\/p>\n<p><\/p>\n<p>Combinaties van verschillende <code>exchange<\/code> moeten helpen om de juiste <strong>schaalbare configuratie<\/strong>, die voldoet aan zowel de huidige als de groeiende vereisten van het systeem, te vinden.<\/p>\n<p><\/p>\n<p>Aantal <code>exchange<\/code> en wachtrijen moet minimaal zijn in vergelijking met het aantal routes.<\/p>\n<p><\/p>\n<p>In het volgende artikel beginnen we dieper in te gaan op Queues en Bindings.<\/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\/\">Goedendag, Habr! Ik wil een handboek delen met kennis die ik heb verzameld over RabbitMQ en samengevoegd in korte aanbevelingen en conclusies.<\/a><\/noindex><\/li>\n<\/ul>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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. Deel 2. Laten we ons verdiepen in Exchanges | ProHoster","description":"Exchange \u2014 een ruilpunt of uitwisselingspunt. Hier worden berichten naartoe gestuurd. Exchange verspreidt het bericht naar een of meerdere wachtrijen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}