{"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\/no\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Del 4. Hva er meldinger og rammer?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Bytte<\/code> \u2014 en bytteplass eller byttepunkt. Her sendes meldinger. <code>Bytte<\/code> <strong>fordeler meldingen<\/strong> til en eller flere k\u00f8er. Den <strong>ruter meldingene til k\u00f8en<\/strong> basert p\u00e5 de etablerte forbindelsene (<code>bindings<\/code>) mellom den og k\u00f8en. <\/p>\n<p><\/p>\n<p><code>Bytte<\/code> er ikke <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">en Erlang-prosess<\/a><\/noindex>. Av hensyn til skalerbarhet <code>exchange<\/code> \u2014 dette er en streng (lenke til modulen med koden der logikken for ruting ligger) i den innebygde databasen <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 tusen bytteplasser vil bruke bare 1MB minne. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Innholdsfortegnelse<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Del 2. Vi g\u00e5r gjennom Exchanges<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Del 4. Hva er meldinger og rammer?<\/a><\/noindex><\/li>\n<li>RabbitMQ. Del 3. Vi g\u00e5r gjennom K\u00f8er og Bindinger<\/li>\n<li>RabbitMQ. Del 5. Ytelse ved publisering og forbruk av meldinger<\/li>\n<li>RabbitMQ. Del 6. Oversikt over modulene Federation og Shovel<\/li>\n<li>RabbitMQ. Del 7. Detaljert om Connection og Channel<\/li>\n<li>RabbitMQ. Del 8. RabbitMQ i .NET<\/li>\n<li>RabbitMQ. Del 9. Overv\u00e5king<\/li>\n<li>Midlertidige k\u00f8er<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Direkte Bytte<\/em><\/h4>\n<p><\/p>\n<p><code>Direkte bytte<\/code> \u2014 brukes n\u00e5r man trenger <strong>\u00e5 levere meldingen til bestemte k\u00f8er<\/strong>. Meldingen publiseres til bytteplassen med en spesifikk <strong>rutingsn\u00f8kkel<\/strong> og havner i alle k\u00f8er som er knyttet til denne bytteplassen med den samme rutingsn\u00f8kkelen. <strong>Rutingsn\u00f8kkel er en streng<\/strong>. S\u00f8k etter samsvar skjer ved hjelp av <strong>sammenligning av strenger for likhet<\/strong>.<\/p>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I <code>rabbitmq<\/code> det finnes et begrep <strong>standard bytte<\/strong>. This <code>direkte bytte<\/code> uten navn. Hvis standard bytte brukes, vil meldingen bli rutet til k\u00f8en med navnet lik <strong>rutingsn\u00f8kkelen til meldingen<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Tema Bytte<\/em><\/h4>\n<p><\/p>\n<p><code>Tema bytte<\/code> \u2013 p\u00e5 samme m\u00e5te <code>direkte bytte<\/code> gir mulighet for selektiv ruting ved \u00e5 sammenligne rutingsn\u00f8kkelen. Men i dette tilfellet blir n\u00f8kkelen angitt <strong>etter m\u00f8nster<\/strong>. Ved opprettelse av m\u00f8nster brukes <code>0<\/code> to eller flere ord (bokstaver <code>AZ<\/code> og <code>az<\/code> og tall <code>0-9<\/code>), adskilt med punktum, samt symboler <code>*<\/code> og <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 kan bli erstattet med n\u00f8yaktig <code>1<\/code> ordet <\/li>\n<li><code>#<\/code> \u2014 kan bli erstattet med <code>0<\/code> to eller flere ord <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fra versjon <code>RabbitMQ 2.4.0<\/code> ble rutingsalgoritmen for <code>tema bytte<\/code> mye raskere. De oppn\u00e5dde dette ved \u00e5 implementere tiln\u00e6rmingen <code>145<\/code> trie implementering <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/blog\/2011\/03\/28\/very-fast-and-scalable-topic-routing-part-2\/\">, som inneb\u00e6rer representasjon av m\u00f8nstre i trestruktur. For eksempel m\u00f8nstre<\/a><\/noindex>a.b.c <code>a.*.b.c<\/code>, <code>a.#.c<\/code>, <code>b.b.c<\/code> og <code>vil bli representert av f\u00f8lgende struktur:<\/code> S\u00f8ket etter samsvar med m\u00f8nsteret skjer fra roten og f\u00f8lger ovenfra og ned.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>bruken av dette bytte kan v\u00e6re<\/p>\n<p><\/p>\n<p>Funksjoner:<\/p>\n<p><\/p>\n<ul>\n<li>et godt valg for mulig fremtidig utvikling av applikasjonen <strong>, siden m\u00f8nstre alltid kan tilpasses slik at meldingen publiseres p\u00e5 samme m\u00e5te som<\/strong>fanout bytte <code>direkte bytte<\/code> eller <code>m\u00f8nstre som bruker<\/code><\/li>\n<li>er mye raskere <code>*<\/code> <strong>, enn m\u00f8nstre som bruker<\/strong>langsommere <code>#<\/code>. <\/li>\n<li><code>tema bytte<\/code> Fanout Bytte <code>direkte bytte<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"fanout-exchange\"><em>Fanout bytte<\/em><\/h4>\n<p><\/p>\n<p><code>alle meldinger leveres til alle k\u00f8er<\/code> \u2013 <strong>selv om meldingen har en spesifikk rutingsn\u00f8kkel.<\/strong> fungerer ikke med rutingsn\u00f8kler og m\u00f8nstre.<\/p>\n<p><\/p>\n<p>Funksjoner:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>fungerer ikke med rute n\u00f8kler og m\u00f8nstre<\/strong> som har en positiv innvirkning p\u00e5 ytelsen. Dette er den raskeste <code>exchange<\/code>;<\/li>\n<li>alle forbrukere m\u00e5 kunne behandle alle meldinger;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" 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> \u2014 sender meldinger til tilknyttede k\u00f8er basert p\u00e5 sammenligning av par (n\u00f8kkel, verdi) egenskaps <code>headers<\/code> bindinger og tilsvarende egenskap ved meldingen. <code>headers<\/code> RabbitMQ. Del 1. Introduksjon. Erlang, AMQP og RPC <code>Dictionary<\/code>. <\/p>\n<p><\/p>\n<p>Hvis det legges til en spesiell n\u00f8kkel i ordboken <code>x-match<\/code> med verdien <code>any<\/code>, vil meldingen rutes ved delvis samsvar av par (n\u00f8kkel, verdi). Denne oppf\u00f8rselen er lik operat\u00f8ren <code>eller<\/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>Som standard inneholder n\u00f8kkelen <code>x-match<\/code> verdien <code>all<\/code>. Dette betyr at meldingen rutes ved fullstendig samsvar av par (n\u00f8kkel, verdi). Denne oppf\u00f8rselen er lik operat\u00f8ren <code>og<\/code>.<\/p>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Funksjoner:<\/p>\n<p><\/p>\n<ul>\n<li>ytterligere fleksibilitet<\/li>\n<li>ytterligere beregningskostnader. Alle par (n\u00f8kkel, verdi) for attributten <code>headers<\/code> m\u00e5 sorteres etter n\u00f8kkelnavn f\u00f8r beregning av ruterverdi for meldingen. <strong>Langsommere enn andre typer 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>Denne bytteformen er <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">et plugin<\/a><\/noindex> og <strong>ikke innebygd<\/strong> i <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (exchange med konsistent hashing) brukes n\u00e5r det er flere k\u00f8er som potensielt kan motta meldingen, og n\u00e5r det er n\u00f8dvendig \u00e5 balansere belastningen mellom dem. Tilknyttingen av meldingen til k\u00f8en skjer basert p\u00e5 vekt (en betinget strengeverdi fra <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Den ekvivalente vekten til k\u00f8ene \u2013 angir at omtrent det samme antall <strong>meldinger vil komme til hver k\u00f8 (hver melding vil kun plasseres i \u00e9n k\u00f8).<\/strong> Det er ingen full garanti for jevn fordeling av meldinger <strong>Hash<\/strong>. <\/p>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>beregnes basert p\u00e5 ruten\u00f8kkelen eller egenskapen<\/code> til meldingen. Hvis alle publiserte meldinger hadde forskjellige ruten\u00f8kler eller <code>headers<\/code> , vil fordelingen skje basert p\u00e5 vekt. Ellers vil ruten\u00f8kkelen eller <code>headers<\/code>M\u00e5 hjelpe n\u00e5r forbrukerens b\u00e5ndbredde trenger \u00e5 vokse mer enn l\u00f8sningen med flere forbrukere som bruker \u00e9n k\u00f8. <code>headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>Kombinering av exchange (E2E)<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Oppf\u00f8rselen til alle exchanges kan kombineres ved \u00e5 bruke<\/em><\/h4>\n<p><\/p>\n<p>Exchange-to-Exchange <strong>(kombinering av exchanges inng\u00e5r ikke i spesifikasjonen<\/strong> . Dette er en utvidelse av protokollen p\u00e5 <code>AMQP<\/code>Takket v\u00e6re <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafisk fremstilling av meldingsstr\u00f8mmen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E2E <code>E2E<\/code> Vi kan finne en riktig skalerbar konfigurasjon som m\u00f8ter b\u00e5de n\u00e5v\u00e6rende og voksende behov.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Opprettelse av Exchange<\/em><\/h4>\n<p><\/p>\n<p>Opprettelsen av utveksling skjer ved hjelp av synkron <code>RPC<\/code> foresp\u00f8rsel til serveren. Foresp\u00f8rselen gj\u00f8res ved hjelp av metoden <code>Exchange.Declare<\/code>, som kalles med parametere:<\/p>\n<p><\/p>\n<ul>\n<li>navn p\u00e5 utvekslingen<\/li>\n<li>type utveksling<\/li>\n<li>andre parametere<\/li>\n<\/ul>\n<p><\/p>\n<p>Eksempel p\u00e5 opprettelse <code>exchange<\/code> using <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 navnet p\u00e5 utvekslingen vi \u00f8nsker \u00e5 opprette. Navnet m\u00e5 v\u00e6re unikt<\/li>\n<li><code>type<\/code> \u2014 type utveksling<\/li>\n<li><code>beholder sin tilstand<\/code> \u2014 hvis du setter <code>true<\/code>, s\u00e5 <code>exchange<\/code> vil v\u00e6re permanent. Den vil bli lagret p\u00e5 disk og kan overleve en omstart av serveren\/brokeren. Hvis verdien <code>false<\/code>, s\u00e5 <code>exchange<\/code> er midlertidig og vil bli fjernet n\u00e5r serveren\/brokeren startes p\u00e5 nytt<\/li>\n<li><code>, f\u00e5r den evnen<\/code> \u2014 automatisk fjerning. <code>Bytte<\/code> vil bli fjernet n\u00e5r alle tilknyttede k\u00f8er fjernes<\/li>\n<li><code>arguments<\/code> \u2014 valgfrie argumenter. Ofte angir man parametere gjennom argumenter <code>alternative exchange<\/code> (<strong>alternativ utveksling<\/strong>). Hvis meldingen ikke kan sendes via den opprinnelige ruten, kan den sendes til den alternative utvekslingen for ruting p\u00e5 en annen vei.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hvis opprettelsen <code>exchange<\/code> <strong>is possible<\/strong>, then the server will send a synchronous <code>RPC<\/code> response <code>Exchange.DeclareOk<\/code>. Hvis opprettelsen <strong>is not possible<\/strong> (the request was denied <code>Exchange.Declare<\/code>), then <strong>the channel will close<\/strong> serveren ved hjelp av asynkron kommando <code>Channel.Close<\/code> and the client will receive an exception <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>, which will contain the error code and its description. <\/p>\n<p><\/p>\n<p>Utveksling m\u00e5 opprettes f\u00f8r publisering av meldinger. Hvis du publiserer en melding i en ikke-eksisterende utveksling \u2014 <code>RabbitMQ<\/code> vil den bli stille fjernet.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Opprettelse av Exchange via grafisk grensesnitt<\/em><\/h4>\n<p><\/p>\n<p>Log in to the admin panel <code>RabbitMQ<\/code> as the user <code>gjest<\/code> (username: <code>gjest<\/code> and password: <code>gjest<\/code>). Note that the user <code>gjest<\/code> can only connect from the local host. Now let's go to the <code>Utvekslinger<\/code> tab and click on <code>Legg til en ny utveksling<\/code>. Fill in the properties:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 4. Hva er meldinger og rammer?\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De fleste egenskapene er beskrevet ovenfor. Her vil vi p\u00e5peke at hvis du angir <code>Intern<\/code>, s\u00e5 kan utvekslingen bare brukes for <code>E2E<\/code>. <code>Produsent<\/code> vil ikke kunne sende meldinger til en slik utveksling.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Konklusjon<\/h3>\n<p><\/p>\n<p>N\u00e5r man utvikler et system er det praktisk \u00e5 beskrive topologien <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\">for ruting<\/a><\/noindex> ved hjelp av en graf. Men f\u00f8r man begynner \u00e5 bygge grafen, er det viktig \u00e5 identifisere stier med h\u00f8y trafikk, da det er disse som krever <strong>h\u00f8yere b\u00e5ndbredde<\/strong> (ytelse). Deretter kan man klassifisere trafikken. Og s\u00e5 kan man begynne \u00e5 bygge.<\/p>\n<p><\/p>\n<p>Hvis det i den bygde grafen finnes <strong>et endelig antall<\/strong> routing-n\u00f8kler, s\u00e5 er det verdt \u00e5 se mot flere <code>m\u00f8nstre som bruker<\/code>, som er 1:1 knyttet til routing-n\u00f8kkelen. Husk at <code>m\u00f8nstre som bruker<\/code> den er raskest.<\/p>\n<p><\/p>\n<p>Hvis antallet ruter <strong>tenderer mot uendelig<\/strong>, s\u00e5 er det verdt \u00e5 vurdere <code>tema bytte<\/code> eller, hvis m\u00f8nsteret ikke er n\u00f8dvendig, kan du velge <code>direct exchange<\/code>, da det er raskere <code>tema bytte<\/code>.<\/p>\n<p><\/p>\n<p>Kombinasjoner av forskjellige <code>exchange<\/code> b\u00f8r hjelpe med \u00e5 finne riktig <strong>skalerbar konfigurasjon<\/strong>, som m\u00f8ter b\u00e5de de n\u00e5v\u00e6rende og voksende kravene til systemet.<\/p>\n<p><\/p>\n<p>Antall <code>exchange<\/code> og rekkene m\u00e5 v\u00e6re minimale i forhold til antall ruter.<\/p>\n<p><\/p>\n<p>I den neste artikkelen begynner vi \u00e5 se n\u00e6rmere p\u00e5 Queues og Bindings.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Lenker<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ-prosjektets nettsted<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <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.5 - 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\/no\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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. Del 2. Vi ser n\u00e6rmere p\u00e5 Exchanges | ProHoster","description":"Exchange - en utveksler eller byttepunkt. Den mottar meldinger. Exchange distribuerer meldinger til en eller flere k\u00f8er.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}