{"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\/lv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","title":{"rendered":"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><code>Apmai\u0146a<\/code> \u2014 apmai\u0146as punkts vai mezgls. Taj\u0101 tiek nos\u016bt\u012btas zi\u0146as. <code>Apmai\u0146a<\/code> <strong>izdala zi\u0146u<\/strong> vien\u0101 vai vair\u0101k\u0101s rind\u0101s. Tas <strong>mar\u0161rut\u0113 zi\u0146as rind\u0101<\/strong> balstoties uz izveidotaj\u0101m sait\u0113m (<code>bindings<\/code>) starp to un rindu. <\/p>\n<p><\/p>\n<p><code>Apmai\u0146a<\/code> nav <noindex><a rel=\"nofollow\" href=\"http:\/\/erlang.org\/doc\/reference_manual\/processes.html\">Erlang proces\u0101<\/a><\/noindex>. No m\u0113rogojam\u012bbas apsv\u0113rumiem <code>apmai\u0146a<\/code> \u2014 tas ir virkne (saite uz modu\u013cu kodu, kur atrodas mar\u0161rut\u0113\u0161anas lo\u0123ika) ieb\u016bv\u0113taj\u0101 datu b\u0101z\u0113 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Mnesia\">mnesia<\/a><\/noindex>. 1 t\u016bkstotis apmai\u0146as punktu pat\u0113r\u0113s tikai 1 MB atmi\u0146as. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Saturs<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/488654\/\">RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP un RPC<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/489086\/\">RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges<\/a><\/noindex><\/li>\n<li>RabbitMQ. 3. da\u013ca. Apskat\u0101m Rindas un Bindings<\/li>\n<li>RabbitMQ. 4. da\u013ca. Apskat\u0101m, kas ir zi\u0146as un ietvari<\/li>\n<li>RabbitMQ. 5. da\u013ca. Zi\u0146u public\u0113\u0161anas un pat\u0113ri\u0146a veiktsp\u0113ja<\/li>\n<li>RabbitMQ. 6. da\u013ca. Modu\u013cu Federation un Shovel p\u0101rskats<\/li>\n<li>RabbitMQ. 7. da\u013ca. Detaliz\u0113ti par Savienojumu un Kanaliz\u0101ciju<\/li>\n<li>RabbitMQ. 8. da\u013ca. RabbitMQ .NET vid\u0113<\/li>\n<li>RabbitMQ. 9. da\u013ca. Uzraudz\u012bba<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"direct-exchange\"><em>Tie\u0161\u0101 apmai\u0146a<\/em><\/h4>\n<p><\/p>\n<p><code>Tie\u0161\u0101 apmai\u0146a<\/code> \u2014 tiek izmantota, kad nepiecie\u0161ams <strong>nog\u0101d\u0101t zi\u0146u noteikt\u0101s rind\u0101s<\/strong>. Zi\u0146a tiek public\u0113ta apmai\u0146as punkt\u0101 ar noteiktu <strong>mar\u0161rut\u0113\u0161anas atsl\u0113gu<\/strong> un nok\u013c\u016bst vis\u0101s rind\u0101s, kas ir saist\u012btas ar \u0161o apmai\u0146as punktu ar t\u0101du pa\u0161u mar\u0161rut\u0113\u0161anas atsl\u0113gu. <strong>Mar\u0161rut\u0113\u0161anas atsl\u0113ga \u2014 t\u0101 ir virkne<\/strong>. Atbilst\u012bbas mekl\u0113\u0161ana tiek veikta, <strong>sal\u012bdzinot virknes par vien\u0101d\u012bb\u0101m<\/strong>.<\/p>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/8ce3ab37542f2a7f8e7ac02a737c5f88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>No <code>rabbitmq<\/code> past\u0101v j\u0113dziens <strong>noklus\u0113juma apmai\u0146as punkts<\/strong>. Tas <code>tie\u0161\u0101 apmai\u0146a<\/code> bez nosaukuma. Ja tiek izmantots noklus\u0113juma apmai\u0146as punkts, tad zi\u0146a tiks mar\u0161rut\u0113ta rind\u0101 ar nosaukumu, kas ir vien\u0101ds ar <strong>zi\u0146as mar\u0161rut\u0113\u0161anas atsl\u0113gu<\/strong>. <\/p>\n<p><\/p>\n<h4 id=\"topic-exchange\"><em>Tematisk\u0101 apmai\u0146a<\/em><\/h4>\n<p><\/p>\n<p><code>Tematisk\u0101 apmai\u0146a<\/code> \u2013 l\u012bdz\u012bgi <code>tie\u0161\u0101 apmai\u0146a<\/code> nodro\u0161ina iesp\u0113ju veikt izv\u0113les mar\u0161rut\u0113\u0161anu, sal\u012bdzinot mar\u0161rut\u0113\u0161anas atsl\u0113gu. Bet \u0161aj\u0101 gad\u012bjum\u0101 atsl\u0113ga tiek noteikta <strong>p\u0113c \u0161ablona<\/strong>. Izveidojot \u0161ablonu, tiek izmantoti <code>0<\/code> vai vair\u0101ki v\u0101rdi (burti <code>AZ<\/code> un <code>az<\/code> un cipari <code>0-9<\/code>), atdal\u012bti ar punktu, k\u0101 ar\u012b simboli <code>*<\/code> un <code>#<\/code>. <\/p>\n<p><\/p>\n<ul>\n<li><code>*<\/code> \u2014 var tikt aizvietoti ar prec\u012bzi <code>1<\/code> v\u0101rds <\/li>\n<li><code>#<\/code> \u2014 var tikt aizvietoti ar <code>0<\/code> vai vair\u0101kiem v\u0101rdiem <\/li>\n<\/ul>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/a0ce48b291a3003eabbe61b3dfa5a4e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0101kot ar versiju <code>RabbitMQ 2.4.0<\/code> mar\u0161rut\u0113\u0161anas algoritms tematiskiem <code>tematisk\u0101s apmai\u0146as<\/code> s\u0101ka darboties l\u012bdz <code>145<\/code> reizes \u0101tr\u0101k. Vi\u0146i to sasniedza, ievie\u0161ot pieeju <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>, kas paredz \u0161ablonu p\u0101rst\u0101vniec\u012bbu koka strukt\u016br\u0101. Piem\u0113ram, \u0161abloni <code>a.b.c<\/code>, <code>a.*.b.c<\/code>, <code>a.#.c<\/code> un <code>b.b.c<\/code> tiks att\u0113loti \u0161\u0101d\u0101 strukt\u016br\u0101:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/56ef5809fec9eb6c1b50a362b89dd05a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Atbilst\u012bbas mekl\u0113\u0161ana \u0161ablonam notiek s\u0101kot no saknes un sekojot no aug\u0161as uz apak\u0161u.<\/p>\n<p><\/p>\n<p>\u012apa\u0161\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li>\u0161\u012bs apmai\u0146as izmanto\u0161ana var k\u013c\u016bt <strong>labs ceramica n\u0101kotnes att\u012bst\u012bbai<\/strong>, jo veidnes vienm\u0113r var piel\u0101got, lai zi\u0146ojums b\u016btu public\u0113ts l\u012bdz\u012bgi <code>tie\u0161\u0101 apmai\u0146a<\/code> vai <code>fanout apmai\u0146a<\/code><\/li>\n<li>veidnes, kuras izmanto <code>*<\/code> <strong>daudz \u0101tr\u0101k<\/strong>, nek\u0101 veidnes, kuras izmanto <code>#<\/code>. <\/li>\n<li><code>tematisk\u0101s apmai\u0146as<\/code> l\u0113n\u0101k <code>tie\u0161\u0101 apmai\u0146a<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"fanout-exchange\"><em>Fanout apmai\u0146a<\/em><\/h4>\n<p><\/p>\n<p><code>Fanout apmai\u0146a<\/code> \u2013 <strong>visi zi\u0146ojumi tiek pieg\u0101d\u0101ti vis\u0101s rind\u0101s<\/strong> pat ja zi\u0146ojumam ir iestat\u012bts mar\u0161rut\u0113\u0161anas atsl\u0113ga.<\/p>\n<p><\/p>\n<p>\u012apa\u0161\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li><code>RabbitMQ<\/code> <strong>neeikpat ar mar\u0161rut\u0113\u0161anas atsl\u0113g\u0101m un veidn\u0113m<\/strong> kas pozit\u012bvi ietekm\u0113 veiktsp\u0113ju. Tas ir \u0101tr\u0101kais <code>apmai\u0146a<\/code>;<\/li>\n<li>visi pat\u0113r\u0113t\u0101jiem j\u0101sp\u0113j apstr\u0101d\u0101t visus zi\u0146ojumus;<\/li>\n<\/ul>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m 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>Headers apmai\u0146a<\/em><\/h4>\n<p><\/p>\n<p><code>Headers apmai\u0146a<\/code> \u2013 nos\u016bta zi\u0146ojumus saist\u012btaj\u0101m rind\u0101m, pamatojoties uz p\u0101ru (atsl\u0113ga, v\u0113rt\u012bba) \u012bpa\u0161\u012bbu sal\u012bdzin\u0101\u0161anu <code>headers<\/code> saist\u012b\u0161anu un zi\u0146ojuma l\u012bdz\u012bgu \u012bpa\u0161\u012bbu. <code>headers<\/code> ir <code>Dictionary&lt;atsl\u0113ga, v\u0113rt\u012bba&gt;<\/code>. <\/p>\n<p><\/p>\n<p>Ja v\u0101rdn\u012bc\u0101 pievieno \u012bpa\u0161u atsl\u0113gu <code>x-match<\/code> ar v\u0113rt\u012bbu <code>any<\/code>, tad zi\u0146ojums tiek mar\u0161rut\u0113ts, ja ir da\u013c\u0113ja atbilst\u012bba p\u0101riem (atsl\u0113ga, v\u0113rt\u012bba). \u0160\u012b uzved\u012bba ir l\u012bdz\u012bga operatoram <code>or<\/code>. <\/p>\n<p><\/p>\n<pre><code class=\"cs\">var bindingArguments = new Dictinary();\nbindingArguments.add(\"x-match\", \"any\");<\/code><\/pre>\n<p><\/p>\n<p>Noklus\u0113juma atsl\u0113ga <code>x-match<\/code> satur v\u0113rt\u012bbu <code>all<\/code>. Tas noz\u012bm\u0113, ka zi\u0146ojums tiek mar\u0161rut\u0113ts, ja p\u0101riem ir pilna atbilst\u012bba (atsl\u0113ga, v\u0113rt\u012bba). \u0160\u012b uzved\u012bba ir l\u012bdz\u012bga operatoram <code>un<\/code>.<\/p>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/e9a02a0df88cb2c0538b97cec9002bf4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u012apa\u0161\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li>papildu elast\u012bgums<\/li>\n<li>papildu apr\u0113\u0137inu izdevumi. Vis\u0101m (atsl\u0113ga, v\u0113rt\u012bba) atrib\u016btu p\u0101riem <code>headers<\/code> j\u0101b\u016bt sak\u0101rtotiem p\u0113c atsl\u0113gas v\u0101rda pirms mar\u0161rut\u0113\u0161anas v\u0113rt\u012bbu apr\u0113\u0137in\u0101\u0161anas. <strong>L\u0113n\u0101k nek\u0101 citi apmai\u0146as veidi<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"consistent-hashing-exchange\"><em>Consistent-Hashing Exchange<\/em><\/h4>\n<p><\/p>\n<p>\u0160\u012b apmai\u0146a ir <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-consistent-hash-exchange\">pieg\u0101de<\/a><\/noindex> un <strong>nav ieb\u016bv\u0113ta<\/strong> par <code>RabbitMQ<\/code>.<\/p>\n<p><\/p>\n<p><code>Consistent-hashing exchange<\/code> (apmai\u0146a ar saska\u0146otu hash\u0113\u0161anu) \u2013 tiek izmantota, kad ir vair\u0101ki rindas, kas ir potenci\u0101lie zi\u0146ojuma sa\u0146\u0113m\u0113ji, un ir nepiecie\u0161ams l\u012bdzsvarot slodzi starp t\u0101m. Zi\u0146ojuma saist\u012b\u0161ana ar rindu notiek p\u0113c svara (nosac\u012bjuma virknes v\u0113rt\u012bbas no <code>0 - n<\/code>). <\/p>\n<p><\/p>\n<p>Vien\u0101du rindu svars noz\u012bm\u0113, ka katr\u0101 rind\u0101 non\u0101ks <strong>aptuveni vien\u0101ds skaits<\/strong> zi\u0146ojumu (katrs zi\u0146ojums tiks ievietots tikai vien\u0101 rind\u0101). <strong>Nav piln\u012bgas garantijas, ka zi\u0146ojumi tiks sadal\u012bti vienm\u0113r\u012bgi<\/strong>. <\/p>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/dd22749cad463fe86619a98276554e10.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><code>Hash<\/code> tiek apr\u0113\u0137in\u0101ts, pamatojoties uz mar\u0161rut\u0113\u0161anas atsl\u0113gu vai <code>headers<\/code> zi\u0146ojuma \u012bpa\u0161\u012bbu. Ja visi public\u0113tie zi\u0146ojumi ir ar da\u017e\u0101d\u0101m mar\u0161rut\u0113\u0161anas atsl\u0113g\u0101m vai <code>headers<\/code>, tad sadal\u012bjums notiks p\u0113c svara. Pret\u0113j\u0101 gad\u012bjum\u0101 tiks izmantota mar\u0161rut\u0113\u0161anas atsl\u0113ga vai <code>headers<\/code>.<\/p>\n<p><\/p>\n<p><strong>J\u0101pal\u012bdz, kad pat\u0113r\u0113t\u0101ja caurlaidsp\u0113jai ir nepiecie\u0161ama palielin\u0101\u0161ana, kas p\u0101rsniedz risin\u0101jumu ar vair\u0101kiem pat\u0113r\u0113t\u0101jiem, kas izmanto vienu rindu.<\/strong><\/p>\n<p><\/p>\n<h4 id=\"kombinirovanie-obmennikov-e2e\"><em>Apmai\u0146as starp apmai\u0146\u0101m (E2E)<\/em><\/h4>\n<p><\/p>\n<p>Visu apmai\u0146u uzved\u012bbu var kombin\u0113t, izmantojot saites <strong>Exchange-to-Exchange<\/strong> (apmai\u0146as kombin\u0113\u0161ana nav iek\u013cauta specifik\u0101cij\u0101 <code>AMQP<\/code>. Tas ir protokola papla\u0161in\u0101jums no puses <code>RabbitMQ<\/code>).<\/p>\n<p><\/p>\n<p>Grafisks zi\u0146u pl\u016bsmas att\u0113lojums:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/41ea01a0f43f2dd195fa4f34f7fc176c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Izmantojot <code>E2E<\/code> m\u0113s varam atrast pareizu m\u0113rogojamo konfigur\u0101ciju, kas atbilst gan pa\u0161reiz\u0113jiem, gan pieaugo\u0161ajiem pras\u012bb\u0101m.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange\"><em>Apmai\u0146as izveide<\/em><\/h4>\n<p><\/p>\n<p>Apmai\u0146as izveide notiek, izmantojot sinhrono <code>RPC<\/code> pras\u012bbu uz serveri. Piepras\u012bjums tiek izpild\u012bts, izmantojot metodi <code>Exchange.Declare<\/code>, kas izsaukta ar parametriem:<\/p>\n<p><\/p>\n<ul>\n<li>apmai\u0146as nosaukums<\/li>\n<li>apmai\u0146as veids<\/li>\n<li>citi parametri<\/li>\n<\/ul>\n<p><\/p>\n<p>Piem\u0113rs izveido\u0161anai <code>apmai\u0146a<\/code> izmantojot <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>apmai\u0146a<\/code> \u2014 apmai\u0146as nosaukums, ko m\u0113s v\u0113lamies izveidot. Nosaukumam j\u0101b\u016bt unik\u0101lam<\/li>\n<li><code>type<\/code> \u2014 apmai\u0146as veids<\/li>\n<li><code>durable<\/code> \u2014 ja iestat\u012bts <code>true<\/code>, tad <code>apmai\u0146a<\/code> b\u016bs past\u0101v\u012bgs. Tas tiks saglab\u0101ts disk\u0101 un var\u0113s izdz\u012bvot servera\/brokeru restartu. Ja v\u0113rt\u012bba <code>false<\/code>, tad <code>apmai\u0146a<\/code> ir pagaidu un tiks dz\u0113sta, kad serveris\/brokers tiks restart\u0113ts<\/li>\n<li><code>autoDelete<\/code> \u2014 autom\u0101tisk\u0101 dz\u0113\u0161ana. <code>Apmai\u0146a<\/code> tiks dz\u0113sts, kad vis\u0101s ar to saist\u012btaj\u0101s rind\u0101s tiek dz\u0113stas.<\/li>\n<li><code>arguments<\/code> \u2014 opcijas argumenti. Visbie\u017e\u0101k, caur argumentiem nor\u0101da <code>alternative exchange<\/code> (<strong>alternat\u012bvo apmai\u0146u<\/strong>). Ja zi\u0146ojums nevar iziet pa s\u0101kotn\u0113jo mar\u0161rutu, to var nos\u016bt\u012bt uz alternat\u012bvo apmai\u0146u, lai mar\u0161rut\u0113tu pa citu ce\u013cu.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/6a352e92f94dadf58ba24de453806133.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja izveide <code>apmai\u0146a<\/code> <strong>ir iesp\u0113jama<\/strong>, tad serveris nos\u016bt\u012bs klientam sinhronu <code>RPC<\/code> atbildi <code>Exchange.DeclareOk<\/code>. Ja izveide <strong>nav iesp\u0113jama<\/strong> (notika atteikums piepras\u012bjumam <code>Exchange.Declare<\/code>), tad <strong>kan\u0101ls tiks aizv\u0113rts<\/strong> servera ar asinkrono komandu <code>Channel.Close<\/code> un klients sa\u0146ems iz\u0146\u0113mumu <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>, kas satur\u012bs k\u013c\u016bdas kodu un t\u0101s aprakstu. <\/p>\n<p><\/p>\n<p>Apmai\u0146as j\u0101izveido pirms zi\u0146ojumu public\u0113\u0161anas. Ja public\u0113siet zi\u0146ojumu neeso\u0161\u0101 apmai\u0146\u0101 \u2014 <code>RabbitMQ<\/code> t\u0101 k\u0101 tas tiks klusi dz\u0113sts.<\/p>\n<p><\/p>\n<h4 id=\"sozdanie-exchange-cherez-graficheskiy-interfeys\"><em>Apmai\u0146as izveide caur grafisko interfeisu<\/em><\/h4>\n<p><\/p>\n<p>Ieejam administr\u0101cijas panel\u012b <code>RabbitMQ<\/code> zem lietot\u0101ja <code>guest<\/code> (lietot\u0101jv\u0101rds: <code>guest<\/code> un parole: <code>guest<\/code>). \u0145emiet v\u0113r\u0101, ka lietot\u0101js <code>guest<\/code> var piesl\u0113gties tikai no lok\u0101l\u0101 hosta. Tagad p\u0101riesim uz cilni <code>Exchanges<\/code> un noklik\u0161\u0137in\u0101sim uz <code>Add a new exchange<\/code>. Aizpild\u0101m \u012bpa\u0161\u012bbas:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges\" src=\"\/wp-content\/uploads\/2020\/02\/c4fd31b8cdb8182690ec8c01ccd2a460.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Liel\u0101k\u0101 da\u013ca \u012bpa\u0161\u012bbu tika aprakst\u012btas iepriek\u0161. \u0160eit piemin\u0113sim, ka, ja nor\u0101d\u012bsiet <code>Iek\u0161\u0113jais<\/code>, tad apmai\u0146u var\u0113s izmantot tikai <code>E2E<\/code>. <code>Ra\u017eot\u0101js<\/code> nenok\u013c\u016bs \u0161\u0101d\u0101 apmai\u0146\u0101.<\/p>\n<p><\/p>\n<h3 id=\"zaklyuchenie\">Secin\u0101jums<\/h3>\n<p><\/p>\n<p>Izstr\u0101d\u0101jot sist\u0113mu, ir \u0113rti aprakst\u012bt <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\">mar\u0161rut\u0113\u0161anas<\/a><\/noindex> topolo\u0123iju, izmantojot grafu. Bet pirms s\u0101kt veidot grafu, ir v\u0113rts izdal\u012bt ce\u013cus ar lielu datu pl\u016bsmu, jo tie tie\u0161i prasa <strong>augst\u0101ku caurlaidsp\u0113ju<\/strong> (veiktsp\u0113ju). P\u0113c tam var klasific\u0113t datu pl\u016bsmu. Un tikai tad uzs\u0101kt b\u016bv\u0113\u0161anu.<\/p>\n<p><\/p>\n<p>Ja izveidotaj\u0101 grafik\u0101 past\u0101v <strong>gal\u012bgs kopa<\/strong> mar\u0161rut\u0113\u0161anas atsl\u0113gu, tad v\u0113rts apl\u016bkot da\u017eus <code>fanout apmai\u0146a<\/code>, kas ir 1:1 saist\u012bti ar mar\u0161rut\u0113\u0161anas atsl\u0113gu. Atceramies, ka <code>fanout apmai\u0146a<\/code> tas ir \u0101tr\u0101kais.<\/p>\n<p><\/p>\n<p>Ja mar\u0161rutu skaits <strong>tuvojas bezgal\u012bbai<\/strong>, tad v\u0113rts piev\u0113rsties <code>tematisk\u0101s apmai\u0146as<\/code> vai, ja modelis nav vajadz\u012bgs, var izv\u0113l\u0113ties <code>tie\u0161o apmai\u0146u<\/code>, jo tas ir \u0101tr\u0101k <code>tematisk\u0101s apmai\u0146as<\/code>.<\/p>\n<p><\/p>\n<p>Da\u017e\u0101du <code>apmai\u0146a<\/code> kombin\u0101cija pal\u012bdz\u0113s atrast pareizo <strong>skalojamo konfigur\u0101ciju<\/strong>, kas apmierina gan pa\u0161reiz\u0113j\u0101s, gan augo\u0161\u0101s sist\u0113mas pras\u012bbas.<\/p>\n<p><\/p>\n<p>Skaits <code>apmai\u0146a<\/code> un rind\u0101m j\u0101b\u016bt minim\u0101lai sal\u012bdzin\u0101jum\u0101 ar mar\u0161rutu skaitu.<\/p>\n<p><\/p>\n<p>N\u0101kamaj\u0101 rakst\u0101 s\u0101ksim s\u012bk\u0101k izp\u0113t\u012bt Queues un Bindings.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Saites<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ projekta m\u0101jas lapa<\/a><\/noindex><\/li>\n<\/ul>\n<p>Avots: <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\/lv\/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=\"lv_LV\" \/>\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\/lv\/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. 2. da\u013ca. Izp\u0113t\u0101m Exchanges | ProHoster","description":"Apmai\u0146a \u2014 apmai\u0146as Punkts vai apmai\u0146as vieta. Taj\u0101 tiek s\u016bt\u012bti zi\u0146ojumi. Apmai\u0146a izplata zi\u0146ojumu vien\u0101 vai vair\u0101k\u0101s rind\u0101s.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/rabbitmq-chast-2-razbiraemsya-s-exchanges","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/69621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=69621"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/69621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/69622"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=69621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=69621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=69621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}