{"id":69346,"date":"2020-02-18T14:44:04","date_gmt":"2020-02-18T11:44:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/rabbitmq-chast-1-introduction-erlang-amqp"},"modified":"2020-03-03T16:14:59","modified_gmt":"2020-03-03T13:14:59","slug":"rabbitmq-chast-1-introduction-erlang-amqp","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sveiki, Habr! V\u0113los dal\u012bties ar manu apm\u0101c\u012bbu-rokasgr\u0101matu, kuru esmu izstr\u0101d\u0101jis, pamatojoties uz <code>RabbitMQ<\/code> un apkopojis \u012bs\u0101s rekomend\u0101cij\u0101s un secin\u0101jumos. <\/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>RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP un RPC<\/li>\n<li>RabbitMQ. 2. da\u013ca. Apskat\u0101m Exchanges<\/li>\n<li>RabbitMQ. 3. da\u013ca. Apskat\u0101m Rindas un Bindings<\/li>\n<li>RabbitMQ. 4. da\u013ca. S\u0101kam izprast, 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<h3 id=\"kratko-pro-amqp\">\u012asi par AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) ir atv\u0113rts protokols zi\u0146u p\u0101rs\u016bt\u012b\u0161anai starp sist\u0113mas komponentiem. Galven\u0101 ideja ir t\u0101da, ka atsevi\u0161\u0137as apak\u0161sist\u0113mas (vai neatkar\u012bgas lietojumprogrammas) var apmain\u012bties ar zi\u0146\u0101m, izmantojot AMQP brokeri, kas nodro\u0161ina mar\u0161rut\u0113\u0161anu, iesp\u0113jams, garant\u0113 pieg\u0101di, datu pl\u016bsmu sadal\u012b\u0161anu, abon\u0113\u0161anu uz nepiecie\u0161amajiem zi\u0146u veidiem.<\/p><\/blockquote>\n<p>Protokols <code>AMQP<\/code> ievie\u0161 tr\u012bs j\u0113dzienus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/bb523c277776ca1ae13fcb9eb10788df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li><code>apmai\u0146a<\/code> (apmai\u0146as punkts vai apmai\u0146a) \u2014 taj\u0101 tiek nos\u016bt\u012btas zi\u0146as. Apmai\u0146as punkts <strong>izdala zi\u0146u<\/strong> ieliek 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>binding<\/code>) starp to un rindu<\/li>\n<li><code>queue<\/code> (rinda) \u2014 datu strukt\u016bra uz disk\u0101 vai operat\u012bvaj\u0101 atmi\u0146\u0101, kas <strong>uzglab\u0101 zi\u0146u saites un nodod zi\u0146u kopijas <code>consumers<\/code><\/strong> (pat\u0113r\u0113t\u0101jiem)<\/li>\n<li><code>binding<\/code> (saist\u012b\u0161ana) \u2014 noteikums, kas <strong>nor\u0101da apmai\u0146as punktam, uz kuru no rind\u0101m \u0161\u012bs zi\u0146as j\u0101non\u0101k<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protokols darbojas virs <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amqp.org\/product\/architecture\">TCP\/IP<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"kratko-pro-erlang\">\u012asi par Erlang<\/h3>\n<p><\/p>\n<p>Projekta avota kods atrodas repozitorij\u0101 uz <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Arhitekt\u016bra <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> balst\u0101s uz <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> un BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> tika izstr\u0101d\u0101ta uz\u0146\u0113mum\u0101 <code>Ericsson<\/code> 1980. gadu vid\u016b k\u0101 sadal\u012bta, notur\u012bga, re\u0101llaika sist\u0113ma lietojumprogramm\u0101m, kas prasa bezatlikt\u012bgo darb\u012bbu 99,999%. <code>Erlang<\/code> tiek izmantota da\u017e\u0101d\u0101s nozar\u0113s un m\u016bsdienu lietojumprogramm\u0101m, piem\u0113ram: <code>WhatsApp<\/code>. Vair\u0101k var izlas\u012bt rakst\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">WhatsApp arhitekt\u016bra, ko Facebook nopirka par 19 miljardiem dol\u0101ru<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">\u012asi par RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 tas ir atv\u0113rt\u0101 koda zi\u0146u brokeris. Tas mar\u0161rut\u0113 zi\u0146as saska\u0146\u0101 ar visiem pamatprincipiem protokola <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> aprakst\u012bts <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifik\u0101ciju<\/a><\/noindex>. <code>RabbitMQ<\/code> \u012bsteno un papildina protokolu <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Galven\u0101 ideja zi\u0146u apmai\u0146as model\u012b <code>RabbitMQ<\/code> ir t\u0101da, ka <code>producer<\/code> (izdev\u0113js) neizs\u016bta zi\u0146as tie\u0161i rind\u0101. Paties\u012bb\u0101 un diezgan bie\u017ei izdev\u0113js pat nezina, vai zi\u0146a visp\u0101r tiks pieg\u0101d\u0101ta k\u0101d\u0101 rind\u0101. <\/p>\n<p><\/p>\n<p>T\u0101 viet\u0101 izdev\u0113js var nos\u016bt\u012bt zi\u0146ojumus tikai uz apmai\u0146u. No vienas puses, apmai\u0146a sa\u0146em zi\u0146ojumus no izdev\u0113jiem, bet no otras puses \u2014 nos\u016bta tos rind\u0101s. Apmai\u0146ai prec\u012bzi j\u0101zina, ko dar\u012bt ar sa\u0146emto zi\u0146ojumu. Vai tas j\u0101pievieno konkr\u0113tai rindai? Vai tam j\u0101b\u016bt pievienotam vair\u0101k\u0101m rind\u0101m? Vai zi\u0146ojums ir j\u0101ignor\u0113?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Darbo\u0161an\u0101s \u012bsum\u0101 <code>RabbitMQ<\/code> var tikt raksturota \u0161\u0101di:<\/p>\n<p><\/p>\n<ol>\n<li>Izdev\u0113js nos\u016bta zi\u0146ojumu noteiktai apmai\u0146ai<\/li>\n<li>Apmai\u0146a, sa\u0146emot zi\u0146ojumu, mar\u0161rut\u0113 to uz vienu vai vair\u0101k\u0101m rind\u0101m saska\u0146\u0101 ar piesaistes noteikumiem starp to un rindu<\/li>\n<li>Rinda glab\u0101 atsauci uz \u0161o zi\u0146ojumu. Pats zi\u0146ojums tiek glab\u0101ts operat\u012bvaj\u0101 atmi\u0146\u0101 vai disk\u0101<\/li>\n<li>Kad pat\u0113r\u0113t\u0101js ir gatavs sa\u0146emt zi\u0146ojumu no rindas, serveris izveido zi\u0146ojuma kopiju p\u0113c atsauces un nos\u016bta<\/li>\n<li>Pat\u0113r\u0113t\u0101js sa\u0146em zi\u0146ojumu un nos\u016bta brokerim apstiprin\u0101jumu<\/li>\n<li>Brokeris, sa\u0146emot apstiprin\u0101jumu, izdz\u0113\u0161 zi\u0146ojuma kopiju no rindas. P\u0113c tam izdz\u0113\u0161 to no operat\u012bv\u0101s atmi\u0146as un no diska<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Process <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80\">RPC (t\u0101lru\u0146a proced\u016bru izsaukums)<\/a><\/noindex> ir pamats praktiski vis\u0101m mijiedarb\u012bb\u0101m ar kodolu <code>RabbitMQ<\/code>. Piem\u0113ram, s\u0101kotn\u0113j\u0101s sarunas par klienta nosac\u012bjumiem ar <code>RabbitMQ<\/code>, demonstr\u0113 noteiktu procesu <code>RPC<\/code>. Kad \u0161\u012b sec\u012bba tiks pabeigta, <code>RabbitMQ<\/code> b\u016bs gatavs pie\u0146emt piepras\u012bjumus no klienta:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u0101pat specifik\u0101cij\u0101 <code>AMQP<\/code> gan klients, gan serveris var izsaukt komandas. Tas noz\u012bm\u0113, ka klients gaida mijiedarb\u012bbu ar serveri. Komandas ir klas\u0113m un metod\u0113m. Piem\u0113ram, <code>Connection.Start<\/code> \u2013 metodes izsaukums <code>Start<\/code> klase <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Savienojums un kan\u0101li<\/em><\/h4>\n<p><\/p>\n<p>\u0160\u0101dai inform\u0101cijas apmai\u0146ai starp klientu un serveri tiek izmantoti <strong>kan\u0101li<\/strong>. Kan\u0101li tiek izveidoti noteikta savienojuma ietvaros <strong>. Katrs kan\u0101ls ir izol\u0113ts no citiem kan\u0101liem. Sinhroniz\u0113t\u0101 gad\u012bjum\u0101 nav iesp\u0113jams izpild\u012bt n\u0101kamo komandu, pirms nav sa\u0146emta atbilde.<\/strong>Lai var\u0113tu nos\u016bt\u012bt komandas paral\u0113li, j\u0101nopen\u0161 vair\u0101kus kan\u0101lus. Katrs kan\u0101ls izveido atsevi\u0161\u0137u <\/p>\n<p><\/p>\n<p>procesu. Vienam savienojumam var b\u016bt daudzi kan\u0101li ( <code>Erlang<\/code> multiplexing<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">). Katram kan\u0101lam ir noteiktas strukt\u016bras un objekti atmi\u0146\u0101. T\u0101d\u0113\u013c, jo vair\u0101k kan\u0101lu ir savienojum\u0101, jo<\/a><\/noindex>vair\u0101k atmi\u0146as izmanto RabbitMQ <strong>\u0161\u0101das savienojuma p\u0101rvald\u012bbai.<\/strong> Vienk\u0101r\u0161s piem\u0113rs savienojuma un kan\u0101la izveido\u0161anai, izmantojot<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. 1. da\u013ca. Ievads. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vienk\u0101r\u0161s piem\u0113rs, k\u0101 izveidot savienojumu un kan\u0101lu, 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\">\/\/ ...\nprivate void TryConnect()\n{\n    var factory = new ConnectionFactory() \n    {\n        HostName = &quot;host_name&quot;,\n        UserName = &quot;user_name&quot;,\n        Password = &quot;p@ssword&quot;,\n        \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043a\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n        \/\/ \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0435\u0432 \u0441\u0435\u0442\u0438 \n        AutomaticRecoveryEnabled = true\n    };\n    _connection = factory.CreateConnection();\n}\n\/\/ ...\npublic void CreateChanel()\n{\n    _channel = _connection.CreateModel();\n    \/\/ other options \n}<\/code><\/pre>\n<p><\/p>\n<p>Jaunu savienojumu atv\u0113rt katrai oper\u0101cijai ir stingri ieteicams neizdar\u012bt, jo tas <strong>izrais\u012bs lielas izmaksas<\/strong>. Kan\u0101liem ar\u012b j\u0101b\u016bt past\u0101v\u012bgiem, ta\u010du daudzas protokola k\u013c\u016bdas noved pie kan\u0101la sl\u0113g\u0161anas, t\u0101d\u0113\u013c kan\u0101la kalpo\u0161anas laiks var b\u016bt \u012bs\u0101ks nek\u0101 savienojumam.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Kur tiek izmantots RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>Mikroservisu kontekst\u0101 protokolu <code>AMQP<\/code> un t\u0101 realiz\u0101ciju <code>RabbitMQ<\/code> bie\u017ei izmanto, lai <strong>veiktu asinkronu mijiedarb\u012bbu<\/strong> starp pakalpojumiem.<\/p>\n<p><\/p>\n<p>Kontekst\u0101 <code>IIOT<\/code> protokols <code>AMQP<\/code> un t\u0101 realiz\u0101ciju <code>RabbitMQ<\/code> to izmanto datu apmai\u0146ai starp serveriem (serveris-serverim). Ar\u012b izmanto papildin\u0101jumu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">RabbitMQ MQTT Plugin<\/a><\/noindex> kas ir protokola <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> realiz\u0101cija datu nodo\u0161anai starp sensoru un serveri zemu \u0101trumu vid\u0113 ar augstu latentumu (pilns atbalst\u012bto protokolu saraksts nor\u0101d\u012bts <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">projekta vietne<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>N\u0101kamaj\u0101 rakst\u0101 s\u0101ksim dzi\u013c\u0101k izp\u0113t\u012bt Exchanges.<\/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\/488654\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b. \u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 RabbitMQ. \u0427\u0430\u0441\u0442\u044c 1. Introduction. Erlang, AMQP \u0438 RPC RabbitMQ. \u0427\u0430\u0441\u0442\u044c 2. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Exchanges RabbitMQ. \u0427\u0430\u0441\u0442\u044c 3. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Queues \u0438 Bindings RabbitMQ. \u0427\u0430\u0441\u0442\u044c 4. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e-\u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0444\u0440\u0435\u0439\u043c\u044b RabbitMQ. \u0427\u0430\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":69347,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-69346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.\" \/>\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-1-introduction-erlang-amqp\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\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 1. Introduction. Erlang, AMQP | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\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-18T11:44:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:59+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. 1. da\u013ca. Ievads. Erlangs, AMQP | ProHoster","description":"Sveiki, Habr! V\u0113los dal\u012bties ar m\u0101c\u012bbu gr\u0101matu, kuru esmu izveidojis no zin\u0101\u0161an\u0101m par RabbitMQ un apkopojis \u012bs\u0101s rekomend\u0101cij\u0101s un secin\u0101jumos.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","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 1. Introduction. Erlang, AMQP | ProHoster","og:description":"\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u043e\u043c-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e RabbitMQ \u0438 \u0441\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","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-18T11:44:04+00:00","article:modified_time":"2020-03-03T13:14:59+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"69346","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 19:24:45","updated":"2022-10-05 05:26:04","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\/69346","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=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}