{"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\/sl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Del 2. Lletra amb Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Exchange<\/code> \u2014 menjavnik ali to\u010dka menjanja. Vanj se po\u0161iljajo sporo\u010dila. <code>Exchange<\/code> <strong>porazdeli sporo\u010dilo<\/strong> v eno ali ve\u010d \u010dakalnih vrst. <strong>usmerja sporo\u010dila v \u010dakalno vrsto<\/strong> na podlagi ustvarjenih povezav (<code>veze<\/code>) med njim in \u010dakalno vrsto. <\/p>\n<p><\/p>\n<p><code>Exchange<\/code> ni <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang procesom<\/a><\/noindex>. Z vidika raz\u0161irljivosti <code>\u2014 ime izmenjevalnika<\/code> \u2014 to je niz (povezava na modul s kodo, kjer je shranjena logika usmerjanja) v vgrajeni bazi podatkov <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 tiso\u010d menjavnikov bo porabilo le 1MB pomnilnika. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Taula de continguts<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Del 1. Introducci\u00f3. Erlang, AMQP i RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Del 2. Lletra amb Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. Del 3. Lletra amb Queues i Bindings<\/li>\n<li>RabbitMQ. Del 4. Lletra amb qu\u00e8 s\u00f3n els missatges i els encapsulaments<\/li>\n<li>RabbitMQ. Del 5. Rendiment de la publicaci\u00f3 i consum de missatges<\/li>\n<li>RabbitMQ. Del 6. Visi\u00f3 general dels m\u00f2duls Federation i Shovel<\/li>\n<li>RabbitMQ. Del 7. Detalls sobre la connexi\u00f3 i el canal<\/li>\n<li>RabbitMQ. Del 8. RabbitMQ en .NET<\/li>\n<li>RabbitMQ. Del 9. Monitoratge<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Direct Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Direktna izmenjava<\/code> \u2014 se uporablja, kadar je potrebno <strong>dostaviti sporo\u010dilo v dolo\u010dene \u010dakalne vrste.<\/strong>. Sporo\u010dilo se objavi v menjavniku s specifi\u010dnim <strong>usmerjevalnim klju\u010dem<\/strong> in pride v vse \u010dakalne vrste, povezane s tem menjavnikom z enakim usmerjevalnim klju\u010dem. <strong>Usmerjevalni klju\u010d je niz<\/strong>. Iskanje ujemanja poteka preko <strong>preverjanja nizov na enakovrednost.<\/strong>.<\/p>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V <code>rabbitmq<\/code> obstaja pojmovanje <strong>menjavnika po privzetku<\/strong>. To je <code>direct exchange<\/code> brez imena. \u010ce se uporablja menjavnik po privzetku, se bo sporo\u010dilo usmerjalo v \u010dakalno vrsto z imenom, enakim <strong>usmerjevalnemu klju\u010du sporo\u010dila.<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Topic Exchange<\/em><\/h4>\n<p><\/p>\n<p><code>Tema izmenjava<\/code> \u2013 podobno <code>direct exchange<\/code> omogo\u010da selektivno usmerjanje z primerjavo usmerjevalnega klju\u010da. V tem primeru se klju\u010d dolo\u010di <strong>na podlagi predloge,<\/strong>. Pri ustvarjanju predloge se uporabljajo <code>0<\/code> eno ali ve\u010d besed (\u010drke <code>AZ<\/code> in <code>az<\/code> in \u0161tevilke <code>0-9<\/code>), lo\u010dene s piko, ter simboli <code>*<\/code> in <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 lahko je zamenjan z natan\u010dno <code>1<\/code> \u201ereplica\u201c (na primer, funkcija snd_ctl_add_slave() je bila zamenjana z snd_ctl_add_replica()), kar je povzro\u010dilo <\/li>\n<li><code>#<\/code> \u2014 lahko je zamenjan z <code>0<\/code> eno ali ve\u010d besed. <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u010dnite z razli\u010dico <code>RabbitMQ 2.4.0<\/code> algoritem usmerjanja za <code>tema izmenjava<\/code> je za\u010del delovati do <code>145<\/code> raz hitreje. Dosegli so to z uvedbo pristopa <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>, ki predvideva predstavitev predlog v obliki drevesne strukture. Na primer, predloge: <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> in <code>b.b.c<\/code> bodo predstavljene z naslednjo strukturo:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iskanje ujemanja s predlogo se za\u010dne pri korenu in poteka od zgoraj navzdol.<\/p>\n<p><\/p>\n<p>Zna\u010dajke:<\/p>\n<p><\/p>\n<ul>\n<li>uporaba tega menjavnika je lahko <strong>dobra izbira za morebitni nadaljnji razvoj aplikacije,<\/strong>, saj je predloge vedno mogo\u010de prilagoditi, da se sporo\u010dilo objavi podobno <code>direct exchange<\/code> ili <code>fanout exchange,<\/code><\/li>\n<li>predloge, ki uporabljajo <code>*<\/code> <strong>veliko hitreje<\/strong>, bolj kot predloge, ki uporabljajo <code>#<\/code>. <\/li>\n<li><code>tema izmenjava<\/code> po\u010dasneje. <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 izmenjava<\/code> \u2013 <strong>vsa sporo\u010dila se dostavijo v vse \u010dakalne vrste<\/strong> tudi \u010de je v sporo\u010dilu dolo\u010den usmerjevalni klju\u010d.<\/p>\n<p><\/p>\n<p>Zna\u010dajke:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>ne deluje s usmerjevalnimi klju\u010di in predlogami,<\/strong> kar pozitivno vpliva na zmogljivost. To je najhitrej\u0161i. <code>\u2014 ime izmenjevalnika<\/code>;<\/li>\n<li>Vsi uporabniki morajo imeti mo\u017enost obdelave vseh sporo\u010dil;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb 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>Menjava glave<\/em><\/h4>\n<p><\/p>\n<p><code>Menjava glav<\/code> \u2014 usmerja sporo\u010dila v povezane vrste na podlagi primerjave parov (klju\u010d, vrednost) lastnosti <code>glave<\/code> vezij in podobnih lastnosti sporo\u010dila. <code>glave<\/code> predstavlja <code>Dictionary<\/code>. <\/p>\n<p><\/p>\n<p>\u010ce dodate poseben klju\u010d v slovar <code>x-match<\/code> z vrednostjo <code>any<\/code>, sporo\u010dilo se usmeri pri delnem ujemanju parov (klju\u010d, vrednost). To vedenje je podobno operatorju <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>Privzeto klju\u010d <code>x-match<\/code> vsebuje vrednost <code>all<\/code>. To pomeni, da se sporo\u010dilo usmeri pri popolnem ujemanju parov ( klju\u010d, vrednost). To vedenje je podobno operatorju <code>in<\/code>.<\/p>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zna\u010dajke:<\/p>\n<p><\/p>\n<ul>\n<li>dodatna prilagodljivost<\/li>\n<li>dodatni stro\u0161ki pri izra\u010dunu. Vsi pari (klju\u010d, vrednost) atributa <code>glave<\/code> morajo biti razvr\u0161\u010deni po imenu klju\u010d pred izra\u010dunom vrednosti usmerjanja sporo\u010dila. <strong>Po\u010dasnej\u0161i kot druge vrste 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>Ta menjava je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">vti\u010dnik<\/a><\/noindex> in <strong>ni vgrajen<\/strong> u <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (menjava s doslednim hashranjem) \u2013 se uporablja, kadar obstaja ve\u010d vrst, ki so potencialni prejemniki sporo\u010dila, in kadar je potrebno uravnote\u017eiti obremenitev med njimi. Povezava sporo\u010dila z vrsto se zgodi na podlagi te\u017ee (pogojna nizovna vrednost od <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Enakovredna te\u017ea vrst \u2013 pomeni, da se v vsako vrsto po\u0161lje <strong>pribli\u017eno enako \u0161tevilo<\/strong> sporo\u010dil (vsako sporo\u010dilo bo poslano le v eno vrsto). <strong>Popolne garancije za enakomerno razporeditev sporo\u010dil ni<\/strong>. <\/p>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> se izra\u010duna na podlagi klju\u010d usmerjanja ali lastnosti <code>glave<\/code> sporo\u010dila. \u010ce so imela vsa objavljena sporo\u010dila razli\u010dne klju\u010de usmerjanja ali <code>glave<\/code>, se bo razporeditev zgodila na podlagi te\u017ee. V nasprotnem primeru se bo uporabil klju\u010d usmerjanja ali <code>glave<\/code>.<\/p>\n<p><\/p>\n<p><strong>Moral bi pomagati, ko je pasovna \u0161irina porabnika potrebna za pove\u010danje bolj kot re\u0161itev z ve\u010d porabniki, ki uporabljajo eno vrsto.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Kombiniranje menjav (E2E)<\/em><\/h4>\n<p><\/p>\n<p>Vedenje vseh menjav lahko kombiniramo z uporabo povezave <strong>Exchange-to-Exchange<\/strong> (kombiniranje menjav ni vklju\u010deno v specifikacijo <code>AMQP<\/code>. To je raz\u0161iritev protokola s strani <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafi\u010dni prikaz toka sporo\u010dil:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zaradi <code>E2E<\/code> lahko najdemo pravilno skalabilno konfiguracijo, ki izpolnjuje tako trenutne kot rasto\u010de zahteve.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Ustvarjanje Exchange<\/em><\/h4>\n<p><\/p>\n<p>Ustvarjanje izmenjevalnika poteka s pomo\u010djo sinhroniziranega <code>RPC<\/code> zahteve na stre\u017enik. Zahteva se izvede z uporabo metode <code>Exchange.Declare<\/code>, ki se pokli\u010de s parametri:<\/p>\n<p><\/p>\n<ul>\n<li>ime izmenjevalnika<\/li>\n<li>tip izmenjevalnika<\/li>\n<li>ostali parametri<\/li>\n<\/ul>\n<p><\/p>\n<p>Primer ustvarjanja <code>\u2014 ime izmenjevalnika<\/code> s pomo\u010djo <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>\u2014 ime izmenjevalnika<\/code> \u2014 ime izmenjevalnika, ki ga \u017eelimo ustvariti. Ime mora biti edinstveno<\/li>\n<li><code>type<\/code> \u2014 tip izmenjevalnika<\/li>\n<li><code>durables<\/code> \u2014 \u010de nastavite <code>true<\/code>, potem <code>\u2014 ime izmenjevalnika<\/code> bo stalno. Shranjeno bo na disku in pre\u017eivelo ponovni zagon stre\u017enika\/brokerja. \u010ce je vrednost <code>false<\/code>, potem <code>\u2014 ime izmenjevalnika<\/code> za\u010dasna, se bo izbrisala, ko se stre\u017enik\/broker znova za\u017eene<\/li>\n<li><code>autoDelete<\/code> \u2014 samodejno brisanje. <code>Exchange<\/code> bo izbrisan, ko bodo izbrisane vse povezane vrste<\/li>\n<li><code>argumenti<\/code> \u2014 neobvezni argumenti. Najpogosteje preko argumentov dolo\u010damo <code>alternative exchange<\/code> (<strong>alternativni izmenjevalnik<\/strong>). \u010ce sporo\u010dilo ne more preiti po prvotni poti, ga je mogo\u010de poslati v alternativni izmenjevalnik za usmerjanje po drugi poti.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010ce je ustvarjanje <code>\u2014 ime izmenjevalnika<\/code> <strong>mogo\u010de<\/strong>, bo stre\u017enik stranki poslal sinhronizirano <code>RPC<\/code> odgovor <code>Exchange.DeclareOk<\/code>. \u010ce je ustvarjanje <strong>ni mogo\u010de<\/strong> (zahtevek je bil zavrnjen <code>Exchange.Declare<\/code>), bo <strong>kanal zaprl<\/strong> po stre\u017eniku s pomo\u010djo asinhronega ukaza <code>Channel.Close<\/code> in stranka bo prejela izjemo <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>, ki bo vsebovala kodo napake in njeno opis. <\/p>\n<p><\/p>\n<p>Izmenjevalnik mora biti ustvarjen pred objavo sporo\u010dil. \u010ce objavite sporo\u010dilo v neobstoje\u010d izmenjevalnik \u2014 <code>RabbitMQ<\/code> ga bo tiho izbrisal.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Ustvarjanje Exchange preko grafi\u010dnega vmesnika<\/em><\/h4>\n<p><\/p>\n<p>Prijavimo se v administrativni panel <code>RabbitMQ<\/code> pod uporabnikom <code>guest<\/code> (uporabni\u0161ko ime: <code>guest<\/code> in geslo: <code>guest<\/code>). Upo\u0161tevajte, da se lahko uporabnik pove\u017ee le z lokalnega gostitelja. Zdaj preidimo na zavihek <code>guest<\/code> Queues <code>Exchanges<\/code> Dodaj novo vrsto <code>Dodaj nov izmenjevalnik<\/code>Ko vpi\u0161emo vse potrebne podatke in pritisnemo na<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Del 2. Lletra amb Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ve\u010dina lastnosti je bila opisana zgoraj. Tu bomo omenili, da \u010de nastavite <code>Notranji<\/code>, se izmenjevalnik lahko uporablja le za <code>E2E<\/code>. <code>Producer<\/code> ne bo mogel po\u0161iljati sporo\u010dil v tak izmenjevalnik.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Zaklju\u010dek<\/h3>\n<p><\/p>\n<p>Pri razvijanju sistema je priro\u010dno opisati topologijo <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\">usmerjanja<\/a><\/noindex> s pomo\u010djo grafa. A preden za\u010dnete graditi graf, je vredno izpostaviti poti z ve\u010djim prometom, saj prav te zahtevajo <strong>vi\u0161jo propustnost<\/strong> (zmogljivost). Nato lahko klasificirate promet. In \u0161ele potem za\u010dnete z gradnjo.<\/p>\n<p><\/p>\n<p>\u010ce v zgrajenem grafu obstaja <strong>kon\u010dno \u0161tevilo<\/strong> klju\u010dev usmerjanja, potem je smiselno pogledati v smer ve\u010d <code>fanout exchange,<\/code>, ki so 1:1 povezani s klju\u010dem usmerjanja. Ne pozabite, da je <code>fanout exchange,<\/code> najhitrej\u0161i.<\/p>\n<p><\/p>\n<p>\u010ce se \u0161tevilo poti <strong>neovirano pribli\u017euje neskon\u010dnosti<\/strong>, potem je smiselno posvetiti pozornost <code>tema izmenjava<\/code> ali, \u010de vzorec ni potreben, lahko izberete <code>direct exchange<\/code>, saj je hitrej\u0161i. <code>tema izmenjava<\/code>.<\/p>\n<p><\/p>\n<p>Kombinacije razli\u010dnih <code>\u2014 ime izmenjevalnika<\/code> bi morale pomagati najti pravo <strong>raz\u0161irljivo konfiguracijo<\/strong>, ki zadostuje tako trenutnim kot rasto\u010dim potrebam sistema.<\/p>\n<p><\/p>\n<p>Koli\u010dina <code>\u2014 ime izmenjevalnika<\/code> in vrst naj bi bilo minimalno v primerjavi s \u0161tevilom poti.<\/p>\n<p><\/p>\n<p>V naslednjem \u010dlanku se bomo podrobneje ukvarjali z vrstami in vezavami.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Povezave<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Spletna stran projekta RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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. Razi\u0161\u010dimo menjava | ProHoster","description":"Exchange \u2014 menjava ali to\u010dka menjave. Vanjo se po\u0161iljajo sporo\u010dila. Exchange porazdeli sporo\u010dilo v eno ali ve\u010d vrst.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}