{"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\/et\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. Osa 2. Uurime Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Vahetus<\/code> \u2014 vahetuspunkt v\u00f5i vahetuspunkt. Siia saadetakse s\u00f5numeid. <code>Vahetus<\/code> <strong>jagab s\u00f5numi<\/strong> \u00fche v\u00f5i mitme j\u00e4rjekorra vahel. See <strong>suunab s\u00f5numeid j\u00e4rjekorda<\/strong> loodud sidemete alusel (<code>seosed<\/code>) tema ja j\u00e4rjekorra vahel. <\/p>\n<p><\/p>\n<p><code>Vahetus<\/code> ei ole <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang-protsess<\/a><\/noindex>. Skaalautuvuse t\u00f5hustamiseks <code>exchange<\/code> \u2014 see on rida (viide moodulile koos koodiga, kus asub suunamislaundus) sisseehitatud andmebaasis <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 000 vahetuspunkti tarbib kokku vaid 1 MB m\u00e4lu. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Sisukord<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. Osa 2. Uurime Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. Osa 3. Uurime Queues ja Bindings<\/li>\n<li>RabbitMQ. Osa 4. Uurime, mis on s\u00f5numid ja raamid<\/li>\n<li>RabbitMQ. Osa 5. S\u00f5numite avaldamise ja tarbimise j\u00f5udlus<\/li>\n<li>RabbitMQ. Osa 6. \u00dclevaade moodulitest Federation ja Shovel<\/li>\n<li>RabbitMQ. Osa 7. \u00dcksikasjalikult Connection ja Channel<\/li>\n<li>RabbitMQ. Osa 8. RabbitMQ .NET-is<\/li>\n<li>RabbitMQ. Osa 9. Juhendamine<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Otsene vahetus<\/em><\/h4>\n<p><\/p>\n<p><code>Otsene vahetus<\/code> \u2014 kasutatakse, kui on vaja <strong>saata s\u00f5num kindlasse j\u00e4rjekorda<\/strong>. S\u00f5num avaldatakse vahetuses kindla <strong>suunamisv\u00f5tmega<\/strong> ja j\u00f5uab k\u00f5ikidesse j\u00e4rjekordadesse, mis on seotud selle vahetuse sarnase suunamisv\u00f5tmega. <strong>Suunamisv\u00f5ti on tekst<\/strong>. Vastavuse kontrollimine toimub <strong>stringide v\u00f5rdsuse kontrollimisega<\/strong>.<\/p>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime 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> on olemas m\u00f5isted <strong>vahetuspunkt vaikimisi<\/strong>. See on <code>otsene vahetus<\/code> ilma nime. Kui kasutatakse vahetuspunkti vaikimisi, siis s\u00f5num suunatakse j\u00e4rjekorda, mille nimi on v\u00f5rdne <strong>s\u00f5numi suunamisv\u00f5tmega<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Teemavahetus<\/em><\/h4>\n<p><\/p>\n<p><code>Teemavahetus<\/code> \u2013 sarnane <code>otsene vahetus<\/code> pakub v\u00f5imalust teostada valikulist suunamist, v\u00f5rreldes suunamisv\u00f5tit. Kuid, sel juhul m\u00e4\u00e4ratakse v\u00f5ti <strong>malli j\u00e4rgi<\/strong>. Malli loomisel kasutatakse <code>0<\/code> v\u00f5i rohkem s\u00f5na (t\u00e4hed <code>AZ<\/code> ja <code>az<\/code> ja numbrid <code>0-9<\/code>), mida eraldatakse punktiga, ja samuti m\u00e4rke <code>*<\/code> ja <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 v\u00f5ib asendada t\u00e4pselt <code>1<\/code> s\u00f5na <\/li>\n<li><code>#<\/code> \u2014 v\u00f5ib asendada <code>0<\/code> v\u00f5i rohkem s\u00f5na <\/li>\n<\/ul>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alates versioonist <code>RabbitMQ 2.4.0<\/code> suunamisalgoritm <code>teema vahetus<\/code> on hakanud t\u00f6\u00f6tama kuni <code>145<\/code> kord kiirem. Nad saavutasid selle, rakendades l\u00e4henemist <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>, mis t\u00e4hendab mallide esitamist puustruktuurina. N\u00e4iteks malli <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> ja <code>b.b.c<\/code> esitatakse j\u00e4rgmise struktuurina:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Malliga vastavuse leidmine toimub, alustades juurest ja j\u00e4rgides \u00fclalt alla.<\/p>\n<p><\/p>\n<p>Omadused:<\/p>\n<p><\/p>\n<ul>\n<li>selle vahetuse rakendamine v\u00f5ib olla <strong>hea valik v\u00f5imaliku tuleviku rakenduse arendamiseks<\/strong>, kuna malle saab alati kohandada, et s\u00f5numit avaldataks samamoodi nagu <code>otsene vahetus<\/code> v\u00f5i <code>fanout exchange<\/code><\/li>\n<li>malle, mis kasutavad <code>*<\/code> <strong>oluliselt kiirem<\/strong>, kui mallid, mis kasutavad <code>#<\/code>. <\/li>\n<li><code>teema vahetus<\/code> aeglasemalt <code>otsene vahetus<\/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>k\u00f5ik s\u00f5numid j\u00f5uavad k\u00f5ikidesse j\u00e4rjekordadesse<\/strong> isegi kui s\u00f5numis on m\u00e4\u00e4ratud suunamisv\u00f5ti.<\/p>\n<p><\/p>\n<p>Omadused:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>ei t\u00f6\u00f6ta marsruutimisv\u00f5tmete ja mallidega<\/strong> mis m\u00f5jutab positiivselt j\u00f5udlust. See on k\u00f5ige kiirem <code>exchange<\/code>;<\/li>\n<li>k\u00f5ik tarbijad peavad suutma t\u00f6\u00f6delda k\u00f5iki s\u00f5numeid;<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime 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>Pealkirjade vahetus<\/em><\/h4>\n<p><\/p>\n<p><code>Pealkirjade vahetus<\/code> suunab s\u00f5numid seotud j\u00e4rjekordadesse, tuginedes paaride (v\u00f5ti, v\u00e4\u00e4rtus) omaduste v\u00f5rdlemisele <code>pealkirjad<\/code> sidumiste ja sarnaste s\u00f5numi omaduste. <code>pealkirjad<\/code> esindab <code>S\u00f5nastik<\/code>. <\/p>\n<p><\/p>\n<p>Kui s\u00f5nastikku lisada eriline v\u00f5ti <code>x-match<\/code> v\u00e4\u00e4rtusega <code>iga<\/code>, siis s\u00f5num suunatakse osalise vastavuse korral paaride (v\u00f5ti, v\u00e4\u00e4rtus). See k\u00e4itumine on sarnane operaatorile <code>v\u00f5i<\/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>Vaikimisi v\u00f5ti <code>x-match<\/code> sisaldab v\u00e4\u00e4rtust <code>all<\/code>. See t\u00e4hendab, et s\u00f5num suunatakse t\u00e4ieliku vastavuse korral paaride (v\u00f5ti, v\u00e4\u00e4rtus). See k\u00e4itumine on sarnane operaatorile <code>ja<\/code>.<\/p>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Omadused:<\/p>\n<p><\/p>\n<ul>\n<li>t\u00e4iendav paindlikkus<\/li>\n<li>t\u00e4iendavad arvutuskoormused. K\u00f5ik paarid (v\u00f5ti, v\u00e4\u00e4rtus) atribuudist <code>pealkirjad<\/code> peavad olema j\u00e4rjestatud v\u00f5tme nime j\u00e4rgi enne s\u00f5numi suunamisv\u00e4\u00e4rtuste arvutamist. <strong>Aeglasem kui muud t\u00fc\u00fcbid 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>See vahetus on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">plugin<\/a><\/noindex> ja <strong>ei ole sisseehitatud<\/strong> \u00fches <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (exchange kaaluga hashimisega) \u2013 kasutatakse, kui on mitu j\u00e4rjekorda, mis v\u00f5ivad potentsiaalselt s\u00f5numi vastu v\u00f5tta, ning kui on vajalik koormuse tasakaalustamine nende vahel. S\u00f5numi seos j\u00e4rjekorraga toimub kaalu alusel (tingimuslik stringiv\u00e4\u00e4rtus alates <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>J\u00e4rjekordade ekvivalentne kaal \u2013 n\u00e4itab, et igasse j\u00e4rjekorda j\u00f5uab <strong>umbes sama arv<\/strong> s\u00f5numeid (iga s\u00f5num paigutatakse ainult \u00fchte j\u00e4rjekorda). <strong>T\u00e4ielikku garantiid s\u00f5numite \u00fchtlasest jaotumisest ei ole<\/strong>. <\/p>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> arvutatakse r\u00e4simise v\u00f5tme v\u00f5i s\u00f5numi omaduse alusel. Kui k\u00f5ik avaldatud s\u00f5numid omasid erinevaid r\u00e4simisv\u00f5tmeid v\u00f5i <code>pealkirjad<\/code> , siis jaotamine toimub kaalu alusel. Vastupidisel juhul kasutatakse r\u00e4simise v\u00f5tit v\u00f5i <code>pealkirjad<\/code>, siis jaotamine toimub kaalu alusel. Vastasel juhul kasutatakse marsruutimisv\u00f5tit v\u00f5i <code>pealkirjad<\/code>.<\/p>\n<p><\/p>\n<p><strong>Peab aitama, kui tarbija l\u00e4bilaskev\u00f5ime vajab kasvamist, mis on k\u00f5rgem kui lahendus mitme tarbija kasutamisel \u00fche j\u00e4rjekorraga.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Vahetusjaamade (E2E) kombineerimine<\/em><\/h4>\n<p><\/p>\n<p>K\u00f5igi vahetusjaamade k\u00e4itumist saab kombineerida \u00fchenduse kaudu <strong>Vahetus- ja vahetuse vahel<\/strong> (vahetusjaamade kombineerimine ei kuulu spetsifikatsiooni <code>AMQP<\/code>. Protokolli laiendamine <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>S\u00f5numivoogude graafiline esitus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arvelt <code>E2E<\/code> saame leida \u00f5ige skaleeritava konfiguratsiooni, mis rahuldab nii olemasolevaid kui ka kasvavaid n\u00f5udmisi.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Vahetuse loomine<\/em><\/h4>\n<p><\/p>\n<p>Vahetuse loomine toimub s\u00fcmbioosina <code>RPC<\/code> p\u00e4ringuga serverisse. P\u00e4ring tehakse meetodi kaudu <code>Exchange.Declare<\/code>, mida kutsutakse v\u00e4lja parameetritega:<\/p>\n<p><\/p>\n<ul>\n<li>vahetuse nimi<\/li>\n<li>vahetuse t\u00fc\u00fcp<\/li>\n<li>teised parameetrid<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4ide loomist <code>exchange<\/code> kasutades <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 vahetuse nimi, mida soovime luua. Nimi peab olema ainulaadne<\/li>\n<li><code>type<\/code> \u2014 vahetuse t\u00fc\u00fcp<\/li>\n<li><code>durable<\/code> \u2014 kui seada <code>true<\/code>, siis <code>exchange<\/code> oluline. See salvestatakse kettale ja suudab ellu j\u00e4\u00e4da serveri\/brokkeri taask\u00e4ivitamisel. Kui v\u00e4\u00e4rtus <code>false<\/code>, siis <code>exchange<\/code> on ajutine ja kustutatakse, kui server\/brokker taask\u00e4ivitub<\/li>\n<li><code>autoDelete<\/code> \u2014 automaatne kustutamine. <code>Vahetus<\/code> kustutatakse, kui k\u00f5ik seotud j\u00e4rjekorrad on kustutatud<\/li>\n<li><code>argumentide<\/code> \u2014 valikulised argumendid. K\u00f5ige sagedamini m\u00e4\u00e4ratakse argumentide kaudu <code>alternatiivne vahetus<\/code> (<strong>alternatiivne vahetus<\/strong>). Kui s\u00f5num ei saa esialgsel marsruudil liikuda, saab selle saata alternatiivsele vahetusele teise marsruudi kaudu suunamiseks.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui loomine <code>exchange<\/code> <strong>on v\u00f5imalik<\/strong>, siis server saadab kliendile s\u00fcnkroonse <code>RPC<\/code> vastuse <code>Exchange.DeclareOk<\/code>. Kui loomine <strong>ei ole v\u00f5imalik<\/strong> (taotluse t\u00f5ttu tekkis t\u00f5rge <code>Exchange.Declare<\/code>), siis <strong>kanal suletakse<\/strong> serveri kaudu as\u00fcnkroonse k\u00e4suga <code>Channel.Close<\/code> ja klient saab erandi <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>, mis sisaldab veakoodi ja selle kirjeldust. <\/p>\n<p><\/p>\n<p>Vahetus peab olema loodud enne s\u00f5numite avaldamist. Kui avaldate s\u00f5numi m\u00f5nes olematus vahetuses \u2014 <code>RabbitMQ<\/code> kustutab see vaikselt selle.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Vahetuse loomine graafilise liidese kaudu<\/em><\/h4>\n<p><\/p>\n<p>Siseneme administraatori paneeli <code>RabbitMQ<\/code> kasutaja all <code>guest<\/code> (kasutajanimi: <code>guest<\/code> ja parool: <code>guest<\/code>). Pange t\u00e4hele, et kasutaja <code>guest<\/code> saab \u00fchendust luua ainult kohalikust hostist. N\u00fc\u00fcd liigume vahekaardile <code>Vahetused<\/code> ja kl\u00f5psame <code>Lisa uus vahetus<\/code>. T\u00e4idame omadused:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 2. Uurime Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Enamik omadusi on juba eespool kirjeldatud. Siin mainime, et kui m\u00e4\u00e4rata <code>Sisemine<\/code>, siis saab vahetust kasutada ainult <code>E2E<\/code>. <code>Producer<\/code> ei saa sellisesse vahetusse s\u00f5numeid saata.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Kokkuv\u00f5te<\/h3>\n<p><\/p>\n<p>S\u00fcsteemi arendamisel on mugav kirjeldada topoloogiat <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\">marsruutimise<\/a><\/noindex> graafi abil. Kuid enne graafi ehitamist on m\u00f5istlik v\u00e4lja tuua suured liiklusvood, kuna just need n\u00f5uavad <strong>k\u00f5rgemat l\u00e4bilaskev\u00f5imet<\/strong> (t\u00f6\u00f6tlemisv\u00f5ime). Seej\u00e4rel saab klassifitseerida liiklust. Ja alles siis alustada ehitamist.<\/p>\n<p><\/p>\n<p>Kui loodud graafis on olemas <strong>l\u00f5pmatu hulk<\/strong> marsruudiv\u00f5tmeid, siis tasub vaadata mitme <code>fanout exchange<\/code>, mis on 1:1 seotud marsruudiv\u00f5tmega. Peame meeles, et <code>fanout exchange<\/code> see on k\u00f5ige kiirem.<\/p>\n<p><\/p>\n<p>Kui marsruutide arv <strong>pulbitseb l\u00f5pmatusse<\/strong>, siis tasub t\u00e4helepanu p\u00f6\u00f6rata <code>teema vahetus<\/code> v\u00f5i kui mall ei ole vajalik, siis v\u00f5ib valida <code>otsevahetuse<\/code>, kuna see on kiirem. <code>teema vahetus<\/code>.<\/p>\n<p><\/p>\n<p>Erinevate kombinatsioonide <code>exchange<\/code> peaks aitama leida \u00f5ige. <strong>skaleeritav konfiguratsioon<\/strong>, mis vastab nii praegustele kui ka kasvavatele s\u00fcsteemi n\u00f5udmistele.<\/p>\n<p><\/p>\n<p>Kogus <code>exchange<\/code> ja j\u00e4rjekordi peaks olema minimaalne v\u00f5rreldes marsruutide arvuga.<\/p>\n<p><\/p>\n<p>J\u00e4rgmises artiklis alustame Queues ja Bindings p\u00f5hjalikumat uurimist.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Lingid<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ projekti veebisait<\/a><\/noindex><\/li>\n<\/ul>\n<p>Allikas: <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 4.9.10 - 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. \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\" \/>\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\/et\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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. Osa 2. Uurime Exchanges | ProHoster","description":"Exchange \u2014 vahetuspunkt v\u00f5i vahetuspunkt. Siin saadetakse s\u00f5numid. Exchange jaotab s\u00f5numi \u00fchte v\u00f5i mitmesse j\u00e4rjekorda. Ta suunab s\u00f5numeid j\u00e4rjekorda, tuginedes loodud sidemetele (bindings) enda ja j\u00e4rjekorra vahel. Exchange ei ole Erlang protsess. Skaalabiltuse kaalutlustel on exchange rida (viide moodulile, kus asub marsruutimise loogika) sisseehitatud andmebaasis.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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. \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}