{"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\/cs\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. \u010c\u00e1st 1. \u00davod. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dobr\u00fd den, Habr! R\u00e1d bych se pod\u011blil o u\u010debnici-pr\u016fvodce znalostmi, kter\u00e9 se mi poda\u0159ilo sesb\u00edrat, <code>RabbitMQ<\/code> a zkr\u00e1tit do n\u011bkolika doporu\u010den\u00ed a z\u00e1v\u011br\u016f. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Obsah<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. \u010c\u00e1st 1. \u00davod. Erlang, AMQP a RPC<\/li>\n<li>RabbitMQ. \u010c\u00e1st 2. Zkoum\u00e1me Exchanges<\/li>\n<li>RabbitMQ. \u010c\u00e1st 3. Zkoum\u00e1me Queues a Bindings<\/li>\n<li>RabbitMQ. \u010c\u00e1st 4. Pochop\u00edme, co jsou zpr\u00e1vy a r\u00e1mce.<\/li>\n<li>RabbitMQ. \u010c\u00e1st 5. V\u00fdkon publikace a spot\u0159eby zpr\u00e1v<\/li>\n<li>RabbitMQ. \u010c\u00e1st 6. P\u0159ehled modul\u016f Federation a Shovel<\/li>\n<li>RabbitMQ. \u010c\u00e1st 7. Podrobn\u011b o Connection a Channel<\/li>\n<li>RabbitMQ. \u010c\u00e1st 8. RabbitMQ v .NET<\/li>\n<li>RabbitMQ. \u010c\u00e1st 9. Monitorov\u00e1n\u00ed<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Stru\u010dn\u011b o AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) \u2014 otev\u0159en\u00fd protokol pro p\u0159enos zpr\u00e1v mezi komponenty syst\u00e9mu. Hlavn\u00ed my\u0161lenkou je, \u017ee jednotliv\u00e9 subsyst\u00e9my (nebo nez\u00e1visl\u00e9 aplikace) mohou vz\u00e1jemn\u011b komunikovat zas\u00edl\u00e1n\u00edm zpr\u00e1v p\u0159es AMQP broker, kter\u00fd zaji\u0161\u0165uje sm\u011brov\u00e1n\u00ed, m\u016f\u017ee garantovat doru\u010den\u00ed, distribuci datov\u00fdch proud\u016f a p\u0159ihl\u00e1\u0161en\u00ed k pot\u0159ebn\u00fdm typ\u016fm zpr\u00e1v.<\/p><\/blockquote>\n<p>Protokol <code>AMQP<\/code> zav\u00e1d\u00ed t\u0159i pojmy:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010c\u00e1st 1. \u00davod. 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>exchange<\/code> (v\u00fdm\u011bnn\u00fd bod nebo v\u00fdm\u011bna) \u2014 sem se zas\u00edlaj\u00ed zpr\u00e1vy. V\u00fdm\u011bnn\u00fd bod <strong>distribuuje zpr\u00e1vu<\/strong> pos\u00edl\u00e1 do jedn\u00e9 nebo v\u00edce front. On <strong>sm\u011b\u0159uje zpr\u00e1vy do fronty<\/strong> na z\u00e1klad\u011b vytvo\u0159en\u00fdch vazeb (<code>binding<\/code>) mezi n\u00edm a frontou<\/li>\n<li><code>fronta<\/code> (fronta) \u2014 struktura dat na disku nebo v opera\u010dn\u00ed pam\u011bti, kter\u00e1 <strong>uchov\u00e1v\u00e1 odkazy na zpr\u00e1vy a p\u0159ed\u00e1v\u00e1 kopie zpr\u00e1v <code>spot\u0159ebitel\u00e9<\/code><\/strong> (konzument\u016fm)<\/li>\n<li><code>binding<\/code> (p\u0159ipojen\u00ed) \u2014 pravidlo, kter\u00e9 <strong>oznamuje v\u00fdm\u011bnn\u00e9mu bodu, do kter\u00e9 fronty tyto zpr\u00e1vy maj\u00ed sm\u011b\u0159ovat.<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protokol funguje na \u00farovni <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\">Stru\u010dn\u011b o Erlangu<\/h3>\n<p><\/p>\n<p>Zdrojov\u00fd k\u00f3d projektu se nach\u00e1z\u00ed v repozit\u00e1\u0159i na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Architektura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> je zalo\u017eena na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> a BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> byl vyvinut spole\u010dnost\u00ed <code>Ericsson<\/code> v polovin\u011b 80. let jako distribuovan\u00fd, odoln\u00fd syst\u00e9m re\u00e1ln\u00e9ho \u010dasu pro aplikace vy\u017eaduj\u00edc\u00ed bezporuchov\u00fd provoz 99,999%. <code>Erlang<\/code> se pou\u017e\u00edv\u00e1 v r\u016fzn\u00fdch odv\u011btv\u00edch a modern\u00edch aplikac\u00edch, nap\u0159\u00edklad v <code>WhatsApp<\/code>. V\u00edce si m\u016f\u017eete p\u0159e\u010d\u00edst v \u010dl\u00e1nku <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">architektura WhatsApp, kterou Facebook koupil za 19 miliard dolar\u016f.<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Stru\u010dn\u011b o RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 je broker zpr\u00e1v s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem. Sm\u011bruje zpr\u00e1vy podle v\u0161ech z\u00e1kladn\u00edch princip\u016f protokolu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> popisovan\u00fdch v <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifikaci<\/a><\/noindex>. <code>RabbitMQ<\/code> realizuje a dopl\u0148uje protokol. <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Hlavn\u00ed my\u0161lenka modelu v\u00fdm\u011bny zpr\u00e1v v <code>RabbitMQ<\/code> se skl\u00e1d\u00e1 v tom, \u017ee <code>producer<\/code> (vydavatel) nepos\u00edl\u00e1 zpr\u00e1vy p\u0159\u00edmo do fronty. Ve skute\u010dnosti a dost \u010dasto ani vydavatel nev\u00ed, zda bude zpr\u00e1va v\u016fbec doru\u010dena do n\u011bjak\u00e9 fronty. <\/p>\n<p><\/p>\n<p>M\u00edsto toho m\u016f\u017ee vydavatel pos\u00edlat zpr\u00e1vy pouze na v\u00fdm\u011bnu. Na jedn\u00e9 stran\u011b v\u00fdm\u011bna p\u0159ij\u00edm\u00e1 zpr\u00e1vy od vydavatel\u016f a na druh\u00e9 je odes\u00edl\u00e1 do front. V\u00fdm\u011bna mus\u00ed p\u0159esn\u011b v\u011bd\u011bt, co d\u011blat s p\u0159ijatou zpr\u00e1vou. M\u00e1 b\u00fdt p\u0159id\u00e1na do ur\u010dit\u00e9 fronty? M\u00e1 b\u00fdt p\u0159id\u00e1na do n\u011bkolika front? Nebo m\u00e1 b\u00fdt zpr\u00e1va ignorov\u00e1na?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010c\u00e1st 1. \u00davod. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kr\u00e1tce lze pr\u00e1ci <code>RabbitMQ<\/code> popisovat n\u00e1sledovn\u011b:<\/p>\n<p><\/p>\n<ol>\n<li>Vydavatel pos\u00edl\u00e1 zpr\u00e1vu ur\u010dit\u00e9mu v\u00fdm\u011bn\u011b<\/li>\n<li>V\u00fdm\u011bna, kter\u00e1 obdr\u017e\u00ed zpr\u00e1vu, sm\u011bruje ji do jedn\u00e9 nebo v\u00edce front podle pravidel vazby mezi n\u00ed a frontou<\/li>\n<li>Fronta uchov\u00e1v\u00e1 odkaz na tuto zpr\u00e1vu. Samotn\u00e1 zpr\u00e1va je uchov\u00e1v\u00e1na v pam\u011bti nebo na disku<\/li>\n<li>Jakmile je spot\u0159ebitel p\u0159ipraven obdr\u017eet zpr\u00e1vu z fronty, server vytvo\u0159\u00ed kopii zpr\u00e1vy podle odkazu a ode\u0161le ji<\/li>\n<li>Spot\u0159ebitel obdr\u017e\u00ed zpr\u00e1vu a po\u0161le brokerovi potvrzen\u00ed<\/li>\n<li>Broker, kter\u00fd obdr\u017eel potvrzen\u00ed, odstran\u00ed kopii zpr\u00e1vy z fronty. Pot\u00e9 odstran\u00ed z pam\u011bti a z disku<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Proces <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 (remote procedure call)<\/a><\/noindex> le\u017e\u00ed v z\u00e1kladech prakticky v\u0161ech interakc\u00ed s j\u00e1drem <code>RabbitMQ<\/code>. Nap\u0159\u00edklad o po\u010d\u00e1te\u010dn\u00edch jedn\u00e1n\u00edch o podm\u00ednk\u00e1ch klienta s <code>RabbitMQ<\/code>, demonstruje ur\u010dit\u00fd proces <code>RPC<\/code>. Jakmile je tato sekvence dokon\u010dena, <code>RabbitMQ<\/code> bude p\u0159ipraven p\u0159ij\u00edmat po\u017eadavky od klienta:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010c\u00e1st 1. \u00davod. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tak\u00e9 ve specifikaci <code>AMQP<\/code> a klient a server mohou volat p\u0159\u00edkazy. To znamen\u00e1, \u017ee klient o\u010dek\u00e1v\u00e1 interakci se serverem. P\u0159\u00edkazy jsou t\u0159\u00eddy a metody. Nap\u0159\u00edklad, <code>Connection.Start<\/code> \u2013 vol\u00e1n\u00ed metody <code>Spustit<\/code> t\u0159\u00eddy <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>P\u0159ipojen\u00ed a kan\u00e1ly<\/em><\/h4>\n<p><\/p>\n<p>Pro takovou v\u00fdm\u011bnu informac\u00ed mezi klientem a serverem se pou\u017e\u00edvaj\u00ed <strong>kan\u00e1ly<\/strong>. Kan\u00e1ly jsou vytv\u00e1\u0159eny v r\u00e1mci <strong>ur\u010dit\u00e9ho p\u0159ipojen\u00ed<\/strong>. Ka\u017ed\u00fd kan\u00e1l je izolov\u00e1n od ostatn\u00edch kan\u00e1l\u016f. V synchronn\u00edm p\u0159\u00edpad\u011b nen\u00ed mo\u017en\u00e9 prov\u00e9st n\u00e1sleduj\u00edc\u00ed p\u0159\u00edkaz, dokud nen\u00ed obdr\u017eena odpov\u011b\u010f. <\/p>\n<p><\/p>\n<p>Aby bylo mo\u017en\u00e9 pos\u00edlat p\u0159\u00edkazy paraleln\u011b, je nutn\u00e9 otev\u0159\u00edt n\u011bkolik kan\u00e1l\u016f. Ka\u017ed\u00fd kan\u00e1l vytv\u00e1\u0159\u00ed samostatn\u00fd <code>Erlang<\/code> proces. Jedno p\u0159ipojen\u00ed m\u016f\u017ee m\u00edt mnoho kan\u00e1l\u016f (<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\">multiplexing<\/a><\/noindex>). Pro ka\u017ed\u00fd kan\u00e1l existuj\u00ed ur\u010dit\u00e9 struktury a objekty v pam\u011bti. Proto \u010d\u00edm v\u00edce kan\u00e1l\u016f existuje v r\u00e1mci spojen\u00ed, t\u00edm <strong>v\u00edce pam\u011bti pou\u017e\u00edv\u00e1 RabbitMQ<\/strong> pro spr\u00e1vu takov\u00e9ho spojen\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. \u010c\u00e1st 1. \u00davod. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jednoduch\u00fd p\u0159\u00edklad vytvo\u0159en\u00ed p\u0159ipojen\u00ed a kan\u00e1lu pomoc\u00ed <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>Otev\u00edrat nov\u00e9 spojen\u00ed pro ka\u017edou operaci se d\u016frazn\u011b nedoporu\u010duje, proto\u017ee to <strong>povede k vy\u0161\u0161\u00edm n\u00e1klad\u016fm<\/strong>. Kan\u00e1ly by m\u011bly b\u00fdt tak\u00e9 trval\u00e9, av\u0161ak mnoh\u00e9 chyby protokolu vedou k uzav\u0159en\u00ed kan\u00e1lu, tak\u017ee \u017eivotnost kan\u00e1lu m\u016f\u017ee b\u00fdt krat\u0161\u00ed ne\u017e u spojen\u00ed.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Kde se pou\u017e\u00edv\u00e1 RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>V kontextu mikroservis\u016f je protokol <code>AMQP<\/code> a jeho implementaci v <code>RabbitMQ<\/code> \u010dasto pou\u017e\u00edv\u00e1n pro <strong>asynchronn\u00ed interakci<\/strong> mezi slu\u017ebami.<\/p>\n<p><\/p>\n<p>V kontextu <code>IIOT<\/code> protokol <code>AMQP<\/code> a jeho implementaci v <code>RabbitMQ<\/code> se pou\u017e\u00edv\u00e1 pro v\u00fdm\u011bnu dat mezi servery (server-server). Tak\u00e9 se pou\u017e\u00edv\u00e1 plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> kter\u00fd je implementac\u00ed protokolu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> pro p\u0159enos dat mezi senzorem a serverem v n\u00edzkorychlostn\u00edch prost\u0159ed\u00edch s vysokou latenc\u00ed (\u00fapln\u00fd seznam podporovan\u00fdch protokol\u016f je uveden na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">str\u00e1nk\u00e1ch projektu<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>V n\u00e1sleduj\u00edc\u00edm \u010dl\u00e1nku se budeme podrobn\u011bji zab\u00fdvat Exchange.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Odkazy<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Web projektu RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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. \u010c\u00e1st 1. \u00davod. Erlang, AMQP | ProHoster","description":"Dobr\u00fd den, Habr! Chci se pod\u011blit o u\u010debnici-pr\u016fvodce znalostmi, kter\u00e9 jsem dok\u00e1zal shrom\u00e1\u017edit o RabbitMQ a shrnout je do kr\u00e1tk\u00fdch doporu\u010den\u00ed a z\u00e1v\u011br\u016f.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}