{"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\/et\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr! Soovin jagada \u00f5pik-viidatud teadmisi, mida \u00f5nnestus mul koguda <code>RabbitMQ<\/code> ja koondada l\u00fchikesteks soovitusteks ja j\u00e4reldusteks. <\/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>RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC<\/li>\n<li>RabbitMQ. Osa 2. Uurime v\u00e4lja Exchanges<\/li>\n<li>RabbitMQ. Osa 3. Uurime Queue-sid ja Bindings-e<\/li>\n<li>RabbitMQ. Osa 4. Selgitame, mis on s\u00f5numid ja raamid<\/li>\n<li>RabbitMQ. Osa 5. S\u00f5numite publikatsiooni ja tarbimise t\u00f5husus<\/li>\n<li>RabbitMQ. Osa 6. \u00dclevaade modulaarsete Federation ja Shovel<\/li>\n<li>RabbitMQ. Osa 7. \u00dcksikasjalik teave Connection ja Chaneli kohta<\/li>\n<li>RabbitMQ. Osa 8. RabbitMQ .NET-is<\/li>\n<li>RabbitMQ. Osa 9. J\u00e4lgimine<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">L\u00fchidalt AMQP-st<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) \u2013 avatud protokoll, mis on m\u00f5eldud s\u00f5numite edastamiseks s\u00fcsteemi komponentide vahel. Peamine idee seisneb selles, et eraldi alams\u00fcsteemid (v\u00f5i iseseisvad rakendused) saavad vahetada s\u00f5numeid mis tahes viisil AMQP-brokeri kaudu, mis teostab marsruutimist, v\u00f5imalusel tagab kohaletoimetamise, jagab andmevooge ning tellib vajalikud s\u00f5numit\u00fc\u00fcbid.<\/p><\/blockquote>\n<p>Protokoll <code>AMQP<\/code> tutvustab kolme m\u00f5istet:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 1. Sissejuhatus. 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>vahetus<\/code> (vahetuspunkt v\u00f5i vahetus) \u2013 siia saadetakse s\u00f5numid. Vahetuspunkt <strong>jagab s\u00f5numi<\/strong> \u00fche v\u00f5i mitme j\u00e4rjekorra vahel. See <strong>marsruutitab s\u00f5numid j\u00e4rjekorda<\/strong> s\u00f5ltuvalt loodud sidemetest (<code>binding<\/code>) nende ja j\u00e4rjekorra vahel<\/li>\n<li><code>queue<\/code> (j\u00e4rjekord) \u2013 andmestruktuur kettal v\u00f5i m\u00e4lus, mis <strong>hoiab viiteid s\u00f5numitele ja annab edasi s\u00f5numite koopiaid <code>tarbijatele<\/code><\/strong> (tarbijatele)<\/li>\n<li><code>binding<\/code> (sidumine) \u2013 reegel, mis <strong>teavitab vahetuspunkti, millisesse j\u00e4rjekorda need s\u00f5numid peaksid minema<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protokoll t\u00f6\u00f6tab peal <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\">L\u00fchidalt Erlangist<\/h3>\n<p><\/p>\n<p>Projekti l\u00e4htekood asub hoidlates <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Arhitektuur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> on p\u00f5hinenud <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> ja BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> on v\u00e4lja t\u00f6\u00f6tanud ettev\u00f5te <code>Ericsson<\/code> 1980ndate keskpaiku ja see on jaotatud, talitlush\u00e4ireteta, reaalajas s\u00fcsteem rakenduste jaoks, mis n\u00f5uavad 99,999% usaldusv\u00e4\u00e4rsust. <code>Erlang<\/code> rakendatakse mitmesugustes valdkondades ja kaasaegsetes rakendustes, n\u00e4iteks <code>WhatsApp<\/code>. Lisainfot v\u00f5ib lugeda artiklist <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">WhatsAppi arhitektuurist, mille Facebook ostis 19 miljardi dollari eest<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">L\u00fchidalt RabbitMQ-st<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 see on avatud l\u00e4htekoodiga s\u00f5numite broker. See marsruutitab s\u00f5numeid vastavalt protokolli k\u00f5igile p\u00f5hialustele, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> mis on kirjeldatud <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">spetsiifikatsioon<\/a><\/noindex>. <code>RabbitMQ<\/code> rakendab ja t\u00e4iustab protokolli <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Peamine idee s\u00f5numite vahetusmudelis <code>RabbitMQ<\/code> on see, et <code>tootja<\/code> ei saada s\u00f5numeid otse j\u00e4rjekorda. Tegelikult ei tea ja \u00fcsna sageli ei tea tootja \u00fcldse, kas s\u00f5num j\u00f5uab mingi j\u00e4rjekorda. <\/p>\n<p><\/p>\n<p>K\u00e4itleja saab saata s\u00f5numeid ainult vahetusele. \u00dchest k\u00fcljest vahetus saab s\u00f5numeid k\u00e4itlejatelt, teisest k\u00fcljest saadab need j\u00e4rjekordadesse. Vahetus peab t\u00e4pselt teadma, mida teha saadud s\u00f5numiga. Kas see peaks olema lisatud kindlasse j\u00e4rjekorda? Kas see peaks olema lisatud mitmesse j\u00e4rjekorda? V\u00f5i tuleks s\u00f5num ignoreerida.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00f6\u00f6d saab l\u00fchidalt kirjeldada j\u00e4rgmiselt: <code>RabbitMQ<\/code> K\u00e4itleja saadab s\u00f5numi kindlale vahetusele<\/p>\n<p><\/p>\n<ol>\n<li>Vahetus, saades s\u00f5numi, suunab selle \u00fchte v\u00f5i mitmesse j\u00e4rjekorda vastavalt vaheduse ja j\u00e4rjekorra vahelistele sidumiss\u00e4tetele<\/li>\n<li>J\u00e4rjekord hoiab selle s\u00f5numi viidet. Ise s\u00f5num hoitakse m\u00e4lu v\u00f5i ketta peal<\/li>\n<li>Niipea kui tarbija on valmis saama s\u00f5numit j\u00e4rjekorrast, loob server s\u00f5numist viidatud koopia ja saadab selle<\/li>\n<li>Tarbija saab s\u00f5numi ja saadab maaklerile kinnituse<\/li>\n<li>Maakler, saades kinnituse, eemaldab s\u00f5numi koopia j\u00e4rjekorrast. Siis eemaldab selle m\u00e4lu ja ketta pealt<\/li>\n<li>RPC (kaugprotseduurik\u00f5ne)<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Protsess <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\">on aluseks praktiliselt k\u00f5ikidele interaktsioonidele tuumaga<\/a><\/noindex> . N\u00e4iteks, esimene arutelu kliendi tingimustega <code>RabbitMQ<\/code>, n\u00e4itab teatud protsessi <code>RabbitMQ<\/code>. Niipea kui see j\u00e4rjekord on l\u00f5pule viidud, <code>RPC<\/code>on s\u00fcsteem valmis kliendi p\u00e4ringute vastuv\u00f5tmiseks: <code>RabbitMQ<\/code> Samuti t\u00e4psustuses<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>saavad nii klient kui server k\u00e4ivitada k\u00e4ske. See t\u00e4hendab, et klient ootab serveriga suhtlemist. K\u00e4sud on klassid ja meetodid. N\u00e4iteks, <code>AMQP<\/code> Connection.Start <code>\u2013 meetodi kutse<\/code> \u00dchendus ja kanalid <code>Alusta<\/code> klassist <code>\u00dchendus<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Kasutatakse teabe vahetamiseks kliendi ja serveri vahel<\/em><\/h4>\n<p><\/p>\n<p>kanalite kaudu <strong>. Kanalid luuakse teatud \u00fchenduse raames<\/strong>. Iga kanal on teistest kanalitest isoleeritud. S\u00fcnkroonses variandis ei saa j\u00e4rgmist k\u00e4sku t\u00e4ita, kuni vastust pole saadud. <strong>Kuna k\u00e4ske peab olema v\u00f5imalik saata paralleelselt, tuleb avada mitu kanalit. Iga kanal loob eraldi<\/strong>protsessi. \u00dcks \u00fchendus v\u00f5ib omada mitmeid kanaleid ( <\/p>\n<p><\/p>\n<p>multiplexing <code>Erlang<\/code> ). Iga kanali jaoks on m\u00e4lu struktuurid ja objektid. Seet\u00f5ttu, mida rohkem kanaleid \u00fchenduse raames on, seda<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\">rohkem m\u00e4lu kasutab RabbitMQ<\/a><\/noindex>selle \u00fchenduse haldamiseks. <strong>Lihtne n\u00e4ide \u00fchenduse ja kanali loomisest kasutades<\/strong> \u00fchenduse haldamiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lihtne n\u00e4ide \u00fchenduse ja kanali loomisest 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\">\/\/ ...\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>Uue \u00fchenduse avamine iga operatsiooni jaoks ei ole soovitatav, kuna see <strong>toob kaasa k\u00f5rged kulud<\/strong>. Kanalid peavad samuti olema pidevad, kuid paljud protokolli vead p\u00f5hjustavad kanali sulgumist, seega v\u00f5ib kanali eluiga olla l\u00fchem kui \u00fchenduse oma.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Kus kasutatakse RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>Mikroteenuste kontekstis, protokolli <code>AMQP<\/code> ja selle rakendust <code>RabbitMQ<\/code> kasutatakse sageli <strong>as\u00fcnkroonseks suhtlemiseks<\/strong> teenuste vahel.<\/p>\n<p><\/p>\n<p>Kontekstis <code>IIoT<\/code> protokoll <code>AMQP<\/code> ja selle rakendust <code>RabbitMQ<\/code> kasutatakse andmete vahetamiseks serverite vahel (server-server). Samuti kasutatakse pistikut <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> mis on protokolli rakendus <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> andmete edastamiseks anduri ja serveri vahel madala kiirusena ning k\u00f5rge latentsusega keskkondades (k\u00f5ik toetatavad protokollid on loetletud <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">projekti lehelt<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>J\u00e4rgmises artiklis hakkame s\u00fcgavamalt tutvuma Exchanges'itega.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Viidatud lingid<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ projekti veebileht<\/a><\/noindex><\/li>\n<\/ul>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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 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\/et\/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. Osa 1. Sissejuhatus. Erlang, AMQP | ProHoster","description":"Tere, Habr! Soovin jagada \u00f5pikute ja juhendite kogumikku, mille olen RabbitMQ kohta koostanud ning l\u00fchidalt soovitusi ja j\u00e4reldusi esitanud.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","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 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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/69346","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=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}