{"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\/ro\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Partea 1. Introducere. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bun\u0103 ziua, Habr! Vreau s\u0103 \u00eemp\u0103rt\u0103\u0219esc un ghid de studiu cu informa\u021biile pe care le-am reu\u0219it s\u0103 le adun <code>RabbitMQ<\/code> \u0219i s\u0103 le compun \u00een recomand\u0103ri scurte \u0219i concluzii. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Cuprins<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Partea 1. Introducere. Erlang, AMQP \u0219i RPC<\/li>\n<li>RabbitMQ. Partea 2. S\u0103 \u00een\u021belegem schimburile<\/li>\n<li>RabbitMQ. Partea 3. \u00cen\u021belegem Queues \u0219i Bindings<\/li>\n<li>RabbitMQ. Partea 4. S\u0103 \u00een\u021belegem ce sunt mesajele \u0219i cadrele<\/li>\n<li>RabbitMQ. Partea 5. Performan\u021ba public\u0103rii \u0219i consumului de mesaje<\/li>\n<li>RabbitMQ. Partea 6. Prezentarea modulelor Federation \u0219i Shovel<\/li>\n<li>RabbitMQ. Partea 7. Detalii despre Conexiune \u0219i Canal<\/li>\n<li>RabbitMQ. Partea 8. RabbitMQ \u00een .NET<\/li>\n<li>RabbitMQ. Partea 9. Monitorizare<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Pe scurt despre AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) \u2014 protocol deschis pentru transmiterea mesajelor \u00eentre componentele sistemului. Ideea principal\u0103 este c\u0103 subsistemele separate (sau aplica\u021biile independente) pot schimba mesaje \u00een mod arbitrar prin intermediul brokerului AMQP, care efectueaz\u0103 rutarea, garanteaz\u0103 livrarea, distribuie fluxurile de date \u0219i se aboneaz\u0103 la tipurile de mesaje dorite.<\/p><\/blockquote>\n<p>Protocolul <code>AMQP<\/code> introduce trei concepte:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partea 1. Introducere. 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> (punct de schimb sau schimb) \u2014 aici sunt trimise mesajele. Punctul de schimb <strong>distribuie mesajul<\/strong> \u00een una sau mai multe cozi. Acesta <strong>ruteaz\u0103 mesajele c\u0103tre coad\u0103<\/strong> pe baza leg\u0103turilor create (<code>binding<\/code>) \u00eentre acesta \u0219i coad\u0103<\/li>\n<li><code>queue<\/code> (coad\u0103) \u2014 structur\u0103 de date pe disc sau \u00een memoria RAM, care <strong>stocheaz\u0103 referin\u021be la mesaje \u0219i returneaz\u0103 copii ale mesajelor <code>consumers<\/code><\/strong> (consumatori)<\/li>\n<li><code>binding<\/code> (leg\u0103tura) \u2014 regul\u0103 care <strong>informeaz\u0103 punctul de schimb \u00een care coad\u0103 ar trebui s\u0103 ajung\u0103 aceste mesaje<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Protocolul func\u021bioneaz\u0103 deasupra <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\">Pe scurt despre Erlang<\/h3>\n<p><\/p>\n<p>Codul surs\u0103 al proiectului se afl\u0103 \u00een repository-ul de pe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Arhitectura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> se bazeaz\u0103 pe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> \u0219i BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> a fost dezvoltat de compania <code>Ericsson<\/code> \u00een mijlocul anilor 1980 ca un sistem distribuit, rezistent la erori, \u00een timp real pentru aplica\u021bii care necesit\u0103 func\u021bionare f\u0103r\u0103 defect timp de 99,999%. <code>Erlang<\/code> este folosit \u00een diferite industrii \u0219i aplica\u021bii moderne, de exemplu \u00een <code>WhatsApp<\/code>. Pute\u021bi citi mai multe \u00een articolul <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">arhitectura WhatsApp, pe care Facebook l-a cump\u0103rat pentru 19 miliarde de dolari.<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Pe scurt despre RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 este un broker de mesaje cu surs\u0103 deschis\u0103. Acesta ruteaz\u0103 mesajele conform principiilor de baz\u0103 ale protocolului <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> descrise \u00een <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifica\u021bii<\/a><\/noindex>. <code>RabbitMQ<\/code> implementaz\u0103 \u0219i completeaz\u0103 protocolul <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>Ideea principal\u0103 a modelului de schimb de mesaje \u00een <code>RabbitMQ<\/code> const\u0103 \u00een faptul c\u0103 <code>producer<\/code> (editorul) nu trimite mesaje direct \u00een coad\u0103. De fapt, editorul nici nu \u0219tie adesea dac\u0103 mesajul va fi livrat vreodat\u0103 \u00een vreo coad\u0103. <\/p>\n<p><\/p>\n<p>\u00cen schimb, editorul poate trimite mesaje doar c\u0103tre un exchange. Pe de o parte, exchange-ul prime\u0219te mesaje de la editori, iar pe de alt\u0103 parte, le trimite \u00een cozi. Exchange-ul trebuie s\u0103 \u0219tie exact ce s\u0103 fac\u0103 cu mesajul primit. Trebuie s\u0103 fie ad\u0103ugat \u00eentr-o anumit\u0103 coad\u0103? Trebuie s\u0103 fie ad\u0103ugat \u00een mai multe cozi? Sau mesajul trebuie ignorat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partea 1. Introducere. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen esen\u021b\u0103, func\u021bionarea <code>RabbitMQ<\/code> poate fi descris\u0103 astfel:<\/p>\n<p><\/p>\n<ol>\n<li>Editorul trimite un mesaj c\u0103tre un anumit exchange<\/li>\n<li>Exchange-ul, dup\u0103 ce prime\u0219te mesajul, \u00eel ruteaz\u0103 \u00een una sau mai multe cozi conform regulilor de leg\u0103tur\u0103 dintre acesta \u0219i coad\u0103<\/li>\n<li>Coad\u0103 p\u0103streaz\u0103 un link c\u0103tre acest mesaj. Mesajul \u00een sine este stocat \u00een memorie sau pe disc.<\/li>\n<li>Odat\u0103 ce consumatorul este preg\u0103tit s\u0103 primeasc\u0103 mesajul din coad\u0103, serverul creeaz\u0103 o copie a mesajului pe baza linkului \u0219i o trimite.<\/li>\n<li>Consumatorul prime\u0219te mesajul \u0219i trimite brokerului o confirmare.<\/li>\n<li>Brokerul, dup\u0103 ce prime\u0219te confirma\u021bia, \u0219terge copia mesajului din coad\u0103. Apoi o \u0219terge din memorie \u0219i de pe disc.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Procesul <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 (apel de procedur\u0103 la distan\u021b\u0103)<\/a><\/noindex> st\u0103 la baza practic a tuturor interac\u021biunilor cu nucleul. <code>RabbitMQ<\/code>. De exemplu, discu\u021biile ini\u021biale despre condi\u021biile clientului cu <code>RabbitMQ<\/code>, demonstreaz\u0103 un anumit proces. <code>RPC<\/code>. Odat\u0103 ce aceast\u0103 secven\u021b\u0103 se finalizeaz\u0103, <code>RabbitMQ<\/code> va fi preg\u0103tit s\u0103 primeasc\u0103 cereri de la client:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partea 1. Introducere. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De asemenea, \u00een specifica\u021bie <code>AMQP<\/code> at\u00e2t clientul c\u00e2t \u0219i serverul pot apela comenzi. Aceasta \u00eenseamn\u0103 c\u0103 clientul a\u0219teapt\u0103 interac\u021biune cu serverul. Comenzile sunt clase \u0219i metode. De exemplu, <code>Connection.Start<\/code> \u2013 apelul metodei <code>Start<\/code> clasei <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Conexiuni \u0219i canale<\/em><\/h4>\n<p><\/p>\n<p>Pentru un astfel de schimb de informa\u021bii \u00eentre client \u0219i server se folosesc <strong>canale<\/strong>. Canalele sunt create \u00een cadrul <strong>unei anumite conexiuni<\/strong>. Fiecare canal este izolat de celelalte canale. \u00cen cazul sincron, nu este posibil s\u0103 execute urm\u0103toarea comand\u0103 p\u00e2n\u0103 nu se prime\u0219te un r\u0103spuns. <\/p>\n<p><\/p>\n<p>Pentru a putea trimite comenzi \u00een paralel, este necesar s\u0103 se deschid\u0103 mai multe canale. Fiecare canal creeaz\u0103 un proces distinct. O conexiune poate avea mai multe canale ( <code>Erlang<\/code> multiplexare<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\">multiplexare<\/a><\/noindex>). Pentru fiecare canal exist\u0103 anumite structuri \u0219i obiecte \u00een memorie. A\u0219adar, cu c\u00e2t sunt mai multe canale \u00een cadrul unei conexiuni, cu at\u00e2t <strong>mai mult\u0103 memorie folose\u0219te RabbitMQ<\/strong> pentru a gestiona o astfel de conexiune.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partea 1. Introducere. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un exemplu simplu de creare a unei conexiuni \u0219i a unui canal folosind <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>Deschiderea unei noi conexiuni pentru fiecare opera\u021biune nu este recomandat\u0103, deoarece aceasta <strong>va duce la costuri mari<\/strong>. Canalele trebuie, de asemenea, s\u0103 fie permanente, dar multe erori de protocol duc la \u00eenchiderea canalului, a\u0219adar durata de via\u021b\u0103 a canalului poate fi mai scurt\u0103 dec\u00e2t cea a conexiunii.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Unde este utilizat RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>\u00cen contextul microservicilor, protocolul <code>AMQP<\/code> \u0219i implementarea sa \u00een <code>RabbitMQ<\/code> sunt adesea folosite pentru <strong>interac\u021biunea asincron\u0103<\/strong> \u00eentre servicii.<\/p>\n<p><\/p>\n<p>\u00cen contextul <code>IIOT<\/code> protocol <code>AMQP<\/code> \u0219i implementarea sa \u00een <code>RabbitMQ<\/code> este folosit pentru schimbul de date \u00eentre servere (server-server). De asemenea, se folose\u0219te pluginul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> care este o implementare a protocolului <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> pentru transmiterea de date \u00eentre un senzor \u0219i un server \u00een medii cu vitez\u0103 mic\u0103 \u0219i laten\u021b\u0103 mare (lista complet\u0103 a protocoalelor suportate este enumerat\u0103 pe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">site-ul proiectului<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>\u00cen urm\u0103torul articol vom \u00eencepe s\u0103 ne aprofund\u0103m \u00een tem\u0103 cu Exchanges.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Linkuri<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Site-ul proiectului RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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. Partea 1. Introducere. Erlang, AMQP | ProHoster","description":"Bun\u0103 ziua, Habr! Vreau s\u0103 \u00eemp\u0103rt\u0103\u0219esc un ghid de \u00eenv\u0103\u021bare \u0219i referin\u021b\u0103 a cuno\u0219tin\u021belor pe care am reu\u0219it s\u0103 le adun despre RabbitMQ \u0219i s\u0103 le comprim \u00een recomand\u0103ri \u0219i concluzii scurte.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}