{"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\/sk\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>V\u00fdmena<\/code> \u2014 je to v\u00fdmenn\u00edk alebo miesto v\u00fdmeny. Sem sa posielaj\u00fa spr\u00e1vy. <code>V\u00fdmena<\/code> <strong>distribuuje spr\u00e1vy<\/strong> do jednej alebo viacer\u00fdch front. <strong>smeruje spr\u00e1vy do fronty<\/strong> na z\u00e1klade vytvoren\u00fdch v\u00e4zieb (<code>viazania<\/code>) medzi n\u00edm a frontou. <\/p>\n<p><\/p>\n<p><code>V\u00fdmena<\/code> nen\u00ed <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang procesom<\/a><\/noindex>. Z d\u00f4vodov \u0161k\u00e1lovate\u013enosti <code>exchange<\/code> \u2014 je to re\u0165azec (odkaz na modul s k\u00f3dom, kde le\u017e\u00ed logika smerovania) vo vstavan\u00e9 datab\u00e1ze <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 tis\u00edc v\u00fdmenn\u00edkov spotrebuje len 1MB pam\u00e4te. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Obsah<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. \u010cas\u0165 1. \u00davod. Erlang, AMQP a RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. \u010cas\u0165 3. Pochopenie Queues a Bindings<\/li>\n<li>RabbitMQ. \u010cas\u0165 4. Pochop\u00edme, \u010do s\u00fa spr\u00e1vy a r\u00e1mce<\/li>\n<li>RabbitMQ. \u010cas\u0165 5. V\u00fdkon publikovania a spotreby spr\u00e1v<\/li>\n<li>RabbitMQ. \u010cas\u0165 6. Preh\u013ead modulov Federation a Shovel<\/li>\n<li>RabbitMQ. \u010cas\u0165 7. Podrobne o Connection a Channel<\/li>\n<li>RabbitMQ. \u010cas\u0165 8. RabbitMQ v .NET<\/li>\n<li>RabbitMQ. \u010cas\u0165 9. Monitorovanie<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Priama v\u00fdmena<\/em><\/h4>\n<p><\/p>\n<p><code>Priama v\u00fdmena<\/code> \u2014 sa pou\u017e\u00edva, ke\u010f je potrebn\u00e9 <strong>doda\u0165 spr\u00e1vu do ur\u010dit\u00fdch front<\/strong>. Spr\u00e1va sa zverejn\u00ed vo v\u00fdmenn\u00edku s konkr\u00e9tnym <strong>smerovac\u00edm k\u013e\u00fa\u010dom<\/strong> a dostane sa do v\u0161etk\u00fdch front, ktor\u00e9 s\u00fa s t\u00fdmto v\u00fdmenn\u00edkom spojen\u00e9 rovnak\u00fdm smerovac\u00edm k\u013e\u00fa\u010dom. <strong>Smerovac\u00ed k\u013e\u00fa\u010d je re\u0165azec<\/strong>. H\u013eadanie zhody prebieha prostredn\u00edctvom <strong>kontroly re\u0165azcov na ekvivalenciu<\/strong>.<\/p>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si 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> existuje pojem <strong>predvolen\u00fd v\u00fdmenn\u00edk<\/strong>. Je to <code>priama v\u00fdmena<\/code> bez n\u00e1zvu. Ak sa pou\u017e\u00edva predvolen\u00fd v\u00fdmenn\u00edk, spr\u00e1va bude smerovan\u00e1 do fronty s n\u00e1zvom zodpovedaj\u00facim <strong>smerovaciemu k\u013e\u00fa\u010du spr\u00e1vy<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>T\u00e9matick\u00e1 v\u00fdmena<\/em><\/h4>\n<p><\/p>\n<p><code>T\u00e9matick\u00e1 v\u00fdmena<\/code> \u2013 podobne <code>priama v\u00fdmena<\/code> umo\u017e\u0148uje selekt\u00edvne smerovanie porovn\u00e1van\u00edm smerovacieho k\u013e\u00fa\u010da. V tomto pr\u00edpade je k\u013e\u00fa\u010d stanoven\u00fd <strong>pod\u013ea \u0161abl\u00f3ny<\/strong>. Pri vytv\u00e1ran\u00ed \u0161abl\u00f3ny sa pou\u017e\u00edvaj\u00fa <code>0<\/code> alebo viac slov (p\u00edsmen\u00e1 <code>AZ<\/code> a <code>az<\/code> a \u010d\u00edslice <code>0-9<\/code>), oddelen\u00fdch bodkou, ako aj znaky <code>*<\/code> a <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 m\u00f4\u017eu by\u0165 nahraden\u00e9 presne <code>1<\/code> slovo <\/li>\n<li><code>#<\/code> \u2014 m\u00f4\u017eu by\u0165 nahraden\u00e9 <code>0<\/code> alebo viacer\u00fdmi slovami <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u010d\u00ednaj\u00fac verziou <code>RabbitMQ 2.4.0<\/code> algoritmus smerovania pre <code>t\u00e9matick\u00fa v\u00fdmenu<\/code> sa stal trikr\u00e1t r\u00fdchlej\u0161\u00edm. Dosiahli to implement\u00e1ciou pr\u00edstupu <code>145<\/code> trie implementation <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/blog\/2011\/03\/28\/very-fast-and-scalable-topic-routing-part-2\/\">, ktor\u00fd predpoklad\u00e1 reprezent\u00e1ciu \u0161abl\u00f3n ako \u0161trukt\u00faru stromu. Napr\u00edklad \u0161abl\u00f3ny<\/a><\/noindex>a.b.c <code>a.*.b.c<\/code>, <code>a.#.c<\/code>, <code>b.b.c<\/code> a <code>bud\u00fa reprezentovan\u00e9 nasleduj\u00facou \u0161trukt\u00farou:<\/code> H\u013eadanie zhody so \u0161abl\u00f3nou sa uskuto\u010d\u0148uje od kore\u0148a a sleduje sa zhora nadol.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>pou\u017eitie tohto v\u00fdmenn\u00edka m\u00f4\u017ee by\u0165<\/p>\n<p><\/p>\n<p>Funkcie:<\/p>\n<p><\/p>\n<ul>\n<li>dobrou vo\u013ebou pre mo\u017en\u00e9 bud\u00face roz\u0161\u00edrenie aplik\u00e1cie <strong>, preto\u017ee \u0161abl\u00f3ny je v\u017edy mo\u017en\u00e9 nastavi\u0165 tak, aby sa spr\u00e1va publikovala podobne<\/strong>v\u00fdmennej v\u00fdmene <code>priama v\u00fdmena<\/code> alebo <code>\u0161abl\u00f3ny, ktor\u00e9 pou\u017e\u00edvaj\u00fa<\/code><\/li>\n<li>ove\u013ea r\u00fdchlej\u0161ie <code>*<\/code> <strong>, ako \u0161abl\u00f3ny, ktor\u00e9 pou\u017e\u00edvaj\u00fa<\/strong>Predvo\u013eba v\u00fdmeny <code>#<\/code>. <\/li>\n<li><code>t\u00e9matick\u00fa v\u00fdmenu<\/code> pomal\u0161ie <code>priama v\u00fdmena<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"fanout-exchange\"><em>Predvo\u013eba v\u00fdmeny<\/em><\/h4>\n<p><\/p>\n<p><code>v\u0161etky spr\u00e1vy sa doru\u010duj\u00fa do v\u0161etk\u00fdch front<\/code> \u2013 <strong>aj ke\u010f je v spr\u00e1ve nastaven\u00fd smerovac\u00ed k\u013e\u00fa\u010d.<\/strong> nefunguje so smerovac\u00edmi k\u013e\u00fa\u010dmi a \u0161abl\u00f3nami.<\/p>\n<p><\/p>\n<p>Funkcie:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>nefunguje s smerovac\u00edmi k\u013e\u00fa\u010dmi a \u0161abl\u00f3nami.<\/strong> \u010do pozit\u00edvne vpl\u00fdva na v\u00fdkonnos\u0165. Toto je najr\u00fdchlej\u0161\u00ed <code>exchange<\/code>;<\/li>\n<li>v\u0161etci pou\u017e\u00edvatelia by mali ma\u0165 mo\u017enos\u0165 spracov\u00e1va\u0165 v\u0161etky spr\u00e1vy;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si 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>Exchange hlavi\u010diek<\/em><\/h4>\n<p><\/p>\n<p><code>V\u00fdmena hlavi\u010diek<\/code> \u2014 posiela spr\u00e1vy do s\u00favisiacich frontov na z\u00e1klade porovnania p\u00e1rov (k\u013e\u00fa\u010d, hodnota) vlastnosti <code>hlavi\u010dky<\/code> pr\u00edpojn\u00fdch a podobne spr\u00e1vy. <code>hlavi\u010dky<\/code> predstavuje <code>Dictionary<\/code>. <\/p>\n<p><\/p>\n<p>Ak do slovn\u00edka prid\u00e1te \u0161peci\u00e1lny k\u013e\u00fa\u010d <code>x-match<\/code> s hodnotou <code>ak\u00fdko\u013evek<\/code>, spr\u00e1va je smerovan\u00e1 pri \u010diasto\u010dnom zhode p\u00e1rov (k\u013e\u00fa\u010d, hodnota). Toto spr\u00e1vanie je podobn\u00e9 oper\u00e1torovi <code>ale<\/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>Predvolene k\u013e\u00fa\u010d <code>x-match<\/code> obsahuje hodnotu <code>v\u0161etko<\/code>. To znamen\u00e1, \u017ee spr\u00e1va je smerovan\u00e1 pri \u00faplnom zhode p\u00e1rov (k\u013e\u00fa\u010d, hodnota). Toto spr\u00e1vanie je podobn\u00e9 oper\u00e1torovi <code>a<\/code>.<\/p>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Funkcie:<\/p>\n<p><\/p>\n<ul>\n<li>dodato\u010dn\u00e1 flexibilita<\/li>\n<li>dodato\u010dn\u00e9 n\u00e1klady na v\u00fdpo\u010dty. V\u0161etky p\u00e1ry (k\u013e\u00fa\u010d, hodnota) atrib\u00fatu <code>hlavi\u010dky<\/code> mus\u00ed sa triedi\u0165 pod\u013ea n\u00e1zvu k\u013e\u00fa\u010da pred v\u00fdpo\u010dtom hodn\u00f4t smerovania spr\u00e1vy. <strong>Pomal\u0161ie ako in\u00e9 typy v\u00fdmeny<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"consistent-hashing-exchange\"><em>Consistent-Hashing Exchange<\/em><\/h4>\n<p><\/p>\n<p>T\u00e1to v\u00fdmena je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">plugin<\/a><\/noindex> a <strong>nie je zabudovan\u00fd<\/strong> v <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (v\u00fdmena so s\u00favisl\u00fdm hashovan\u00edm) \u2013 sa pou\u017e\u00edva, ke\u010f existuje nieko\u013eko frontov, ktor\u00e9 s\u00fa potenci\u00e1lnymi pr\u00edjemcami spr\u00e1vy, a ke\u010f je potrebn\u00e9 vyv\u00e1\u017ei\u0165 za\u0165a\u017eenie medzi nimi. Priradenie spr\u00e1vy k fronte prebieha na z\u00e1klade v\u00e1hy (podmienen\u00e1 re\u0165azcov\u00e1 hodnota od <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Rovnocenn\u00e1 v\u00e1ha frontov \u2013 znamen\u00e1, \u017ee do ka\u017ed\u00e9ho frontu pr\u00edde <strong>pribli\u017ene rovnak\u00fd po\u010det<\/strong> spr\u00e1v (ka\u017ed\u00e1 spr\u00e1va bude umiestnen\u00e1 iba do jednej fronty). <strong>Nie je zabezpe\u010den\u00e1 \u00fapln\u00e1 z\u00e1ruka rovnomern\u00e9ho rozdelenia spr\u00e1v<\/strong>. <\/p>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> sa po\u010d\u00edta na z\u00e1klade k\u013e\u00fa\u010da smerovania alebo vlastnosti <code>hlavi\u010dky<\/code> spr\u00e1vy. Ak v\u0161etky publikovan\u00e9 spr\u00e1vy mali r\u00f4zne k\u013e\u00fa\u010de smerovania alebo <code>hlavi\u010dky<\/code>, rozdelenie sa uskuto\u010dn\u00ed na z\u00e1klade v\u00e1hy. Inak sa pou\u017eije k\u013e\u00fa\u010d smerovania alebo <code>hlavi\u010dky<\/code>.<\/p>\n<p><\/p>\n<p><strong>Malo by pom\u00e1ha\u0165, ke\u010f potrebuje spotrebite\u013e \u0161ir\u0161iu \u0161\u00edrku p\u00e1sma, ne\u017e je rie\u0161enie s viacer\u00fdmi spotrebite\u013emi pou\u017e\u00edvaj\u00facimi jeden front.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Kombinovanie v\u00fdmen (E2E)<\/em><\/h4>\n<p><\/p>\n<p>Spr\u00e1vanie v\u0161etk\u00fdch v\u00fdmen sa d\u00e1 kombinova\u0165 pomocou spojenia <strong>Exchange-to-Exchange<\/strong> (kombinovanie v\u00fdmen nie je zahrnut\u00e9 v \u0161pecifik\u00e1cii <code>AMQP<\/code>. Toto je roz\u0161\u00edrenie protokolu z poh\u013eadu <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafick\u00e9 zobrazenie toku spr\u00e1v:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u010faka <code>E2E<\/code> m\u00f4\u017eeme n\u00e1js\u0165 spr\u00e1vnu \u0161k\u00e1lovate\u013en\u00fa konfigur\u00e1ciu, ktor\u00e1 vyhovuje s\u00fa\u010dasn\u00fdm aj rast\u00facim po\u017eiadavk\u00e1m.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Vytvorenie Exchange<\/em><\/h4>\n<p><\/p>\n<p>Vytvorenie v\u00fdmeny prebieha pomocou synchronn\u00e9ho <code>RPC<\/code> \u017eiadania na server. \u017diados\u0165 sa uskuto\u010d\u0148uje pomocou met\u00f3dy <code>Exchange.Declare<\/code>, vy\u017eaduje si parametre:<\/p>\n<p><\/p>\n<ul>\n<li>n\u00e1zov v\u00fdmeny<\/li>\n<li>typ v\u00fdmeny<\/li>\n<li>in\u00e9 parametre<\/li>\n<\/ul>\n<p><\/p>\n<p>Pr\u00edklad vytvorenia <code>exchange<\/code> s pomocou <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 n\u00e1zov v\u00fdmeny, ktor\u00fa chceme vytvori\u0165. N\u00e1zov mus\u00ed by\u0165 jedine\u010dn\u00fd.<\/li>\n<li><code>type<\/code> \u2014 typ v\u00fdmeny<\/li>\n<li><code>durable<\/code> \u2014 ak je nastaven\u00e9 <code>true<\/code>, tak <code>exchange<\/code> bude trval\u00e9. Bude ulo\u017een\u00e9 na disku a dok\u00e1\u017ee pre\u017ei\u0165 re\u0161tart servera\/brokera. Ak je hodnota <code>nepravda<\/code>, tak <code>exchange<\/code> do\u010dasn\u00e1, bude odstr\u00e1nen\u00e1, ke\u010f bude server\/broker re\u0161tartovan\u00fd.<\/li>\n<li><code>autoDelete<\/code> \u2014 automatick\u00e9 mazanie. <code>V\u00fdmena<\/code> bude odstr\u00e1nen\u00e9, ke\u010f bud\u00fa odstr\u00e1nen\u00e9 v\u0161etky s n\u00edm s\u00favisiace fronty.<\/li>\n<li><code>argumentoch<\/code> \u2014 volite\u013en\u00e9 argumenty. Naj\u010dastej\u0161ie sa prostredn\u00edctvom argumentov nastavuj\u00fa <code>alternative exchange<\/code> (<strong>alternat\u00edvna v\u00fdmena<\/strong>). Ak spr\u00e1va nem\u00f4\u017ee prejs\u0165 p\u00f4vodnou trasou, m\u00f4\u017ee by\u0165 odoslan\u00e1 do alternat\u00edvnej v\u00fdmeny na pretrasovanie inou cestou.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ak sa vytvorenie <code>exchange<\/code> <strong>mo\u017eno<\/strong>, server za\u0161le klientovi synchronn\u00e9 <code>RPC<\/code> odpovedi <code>Exchange.DeclareOk<\/code>. Ak sa vytvorenie <strong>ned\u00e1 vykona\u0165<\/strong> (nastal probl\u00e9m s po\u017eiadavkou <code>Exchange.Declare<\/code>), potom <strong>kan\u00e1l sa zatvor\u00ed<\/strong> serverom pomocou asynchr\u00f3nneho pr\u00edkazu <code>Channel.Close<\/code> a klient dostane v\u00fdnimku <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>, ktor\u00e1 bude obsahova\u0165 k\u00f3d chyby a jej opis. <\/p>\n<p><\/p>\n<p>V\u00fdmena mus\u00ed by\u0165 vytvoren\u00e1 pred publikovan\u00edm spr\u00e1v. Ak publikujete spr\u00e1vu do neexistuj\u00facej v\u00fdmeny \u2014 <code>RabbitMQ<\/code> ticho ju odstr\u00e1ni.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Vytvorenie Exchange cez grafick\u00e9 rozhranie<\/em><\/h4>\n<p><\/p>\n<p>Prihl\u00e1ste sa do ovl\u00e1dacieho panela <code>RabbitMQ<\/code> pod pou\u017e\u00edvate\u013eom <code>n\u00e1v\u0161tevn\u00edk<\/code> (username: <code>n\u00e1v\u0161tevn\u00edk<\/code> a password: <code>n\u00e1v\u0161tevn\u00edk<\/code>). V\u0161imnite si, \u017ee pou\u017e\u00edvate\u013e <code>n\u00e1v\u0161tevn\u00edk<\/code> sa m\u00f4\u017ee pripoji\u0165 iba z lok\u00e1lneho hostite\u013ea. Teraz prejdeme na kartu <code>Exchanges<\/code> a klikneme na <code>Add a new exchange<\/code>. Vypl\u0148te vlastnosti:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010cas\u0165 2. Rozoberieme si Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00e4\u010d\u0161ina vlastnost\u00ed bola pop\u00edsan\u00e1 vy\u0161\u0161ie. Tu zd\u00f4razn\u00edme, \u017ee ak nastav\u00edte <code>Internal<\/code>, v\u00fdmena bude m\u00f4c\u0165 by\u0165 pou\u017eit\u00e1 len pre <code>E2E<\/code>. <code>Producer<\/code> nebude m\u00f4c\u0165 odosiela\u0165 spr\u00e1vy na tak\u00fato v\u00fdmenu.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Z\u00e1ver<\/h3>\n<p><\/p>\n<p>Pri v\u00fdvoji syst\u00e9mu je praktick\u00e9 popisova\u0165 topol\u00f3giu <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\">trasovania<\/a><\/noindex> pomocou grafu. Ale predt\u00fdm, ne\u017e za\u010dnete stava\u0165 graf, je vhodn\u00e9 vyzna\u010di\u0165 cesty s ve\u013ek\u00fdm prenosom, preto\u017ee tie si vy\u017eaduj\u00fa <strong>vy\u0161\u0161iu priepustnos\u0165.<\/strong> (v\u00fdkon). Potom je mo\u017en\u00e9 klasifikova\u0165 prev\u00e1dzku. A a\u017e potom prist\u00fapi\u0165 k v\u00fdstavbe.<\/p>\n<p><\/p>\n<p>Ak v zostavenom grafe existuje <strong>kone\u010dn\u00e9 mno\u017estvo<\/strong> smerovac\u00edch k\u013e\u00fa\u010dov, je potrebn\u00e9 sa pozrie\u0165 na nieko\u013eko <code>\u0161abl\u00f3ny, ktor\u00e9 pou\u017e\u00edvaj\u00fa<\/code>, ktor\u00e9 s\u00fa 1:1 spojen\u00e9 so smerovac\u00edm k\u013e\u00fa\u010dom. Pam\u00e4tajme, \u017ee <code>\u0161abl\u00f3ny, ktor\u00e9 pou\u017e\u00edvaj\u00fa<\/code> najr\u00fdchlej\u0161ie.<\/p>\n<p><\/p>\n<p>Ak po\u010det tr\u00e1s <strong>smeruje k nekone\u010dnu<\/strong>, je potrebn\u00e9 venova\u0165 pozornos\u0165 <code>t\u00e9matick\u00fa v\u00fdmenu<\/code> alebo, ak \u0161abl\u00f3na nie je potrebn\u00e1, je mo\u017en\u00e9 zvoli\u0165 <code>direct exchange<\/code>, preto\u017ee je r\u00fdchlej\u0161\u00ed <code>t\u00e9matick\u00fa v\u00fdmenu<\/code>.<\/p>\n<p><\/p>\n<p>Kombin\u00e1cie r\u00f4znych <code>exchange<\/code> by mali pom\u00f4c\u0165 n\u00e1js\u0165 spr\u00e1vnu <strong>\u0161k\u00e1lovate\u013en\u00fa konfigur\u00e1ciu<\/strong>, ktor\u00e1 vyhovuje ako aktu\u00e1lnym, tak aj rast\u00facim po\u017eiadavk\u00e1m syst\u00e9mu.<\/p>\n<p><\/p>\n<p>Po\u010det <code>exchange<\/code> a fronty by mali by\u0165 minim\u00e1lne v porovnan\u00ed s po\u010dtom tr\u00e1s.<\/p>\n<p><\/p>\n<p>V nasleduj\u00facom \u010dl\u00e1nku sa podrobnej\u0161ie zameriame na Queues a Bindings.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Odkazy<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Webov\u00e1 str\u00e1nka projektu RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Zdroj: <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\/sk\/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=\"sk_SK\" \/>\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\/sk\/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. \u010cas\u0165 2. Rozober\u00e1me Exchanges | ProHoster","description":"Exchange \u2014 zmen\u00e1r\u0148a alebo v\u00fdmenn\u00e9 miesto. Posielaj\u00fa sa do nej spr\u00e1vy. Exchange rozde\u013euje spr\u00e1vu do jednej alebo viacer\u00fdch front.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}