{"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\/fr\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Partie 1. Introduction. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour, Habr ! Je souhaite partager un manuel-r\u00e9f\u00e9rence des connaissances que j'ai pu rassembler sur <code>RabbitMQ<\/code> et condenser en recommandations et conclusions courtes. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Table des mati\u00e8res<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Partie 1. Introduction. Erlang, AMQP et RPC<\/li>\n<li>RabbitMQ. Partie 2. Comprenons les Exchanges<\/li>\n<li>RabbitMQ. Partie 3. Comprendre les Queues et les Bindings<\/li>\n<li>RabbitMQ. Partie 4. Comprenons ce que sont les messages et les trames.<\/li>\n<li>RabbitMQ. Partie 5. Performance de publication et de consommation des messages<\/li>\n<li>RabbitMQ. Partie 6. Aper\u00e7u des modules Federation et Shovel<\/li>\n<li>RabbitMQ. Partie 7. D\u00e9tails sur la connexion et le canal<\/li>\n<li>RabbitMQ. Partie 8. RabbitMQ sous .NET<\/li>\n<li>RabbitMQ. Partie 9. Surveillance<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Bri\u00e8vement sur l'AMQP<\/h3>\n<p><\/p>\n<blockquote><p>L'AMQP (Advanced Message Queuing Protocol) est un protocole ouvert pour le transfert de messages entre les composants d'un syst\u00e8me. L'id\u00e9e principale est que des sous-syst\u00e8mes distincts (ou des applications ind\u00e9pendantes) peuvent \u00e9changer des messages de mani\u00e8re arbitraire via un courtier AMQP, qui effectue le routage, garantit potentiellement la livraison, distribue des flux de donn\u00e9es et s'abonne aux types de messages n\u00e9cessaires.<\/p><\/blockquote>\n<p>Protocole <code>AMQP<\/code> introduit trois concepts :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partie 1. Introduction. 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>l'\u00e9change<\/code> (point d'\u00e9change ou \u00e9change) - o\u00f9 les messages sont envoy\u00e9s. Le point d'\u00e9change <strong>distribue le message<\/strong> envoie \u00e0 une ou plusieurs files d'attente. Il <strong>achemine les messages vers la file d'attente<\/strong> sur la base des liaisons cr\u00e9\u00e9es (<code>binding<\/code>) entre lui et la file d'attente<\/li>\n<li><code>queue<\/code> (file d'attente) - une structure de donn\u00e9es sur disque ou en m\u00e9moire vive, qui <strong>stocke des liens vers les messages et fournit des copies des messages <code>consumers<\/code><\/strong> (aux consommateurs)<\/li>\n<li><code>binding<\/code> (liaison) - une r\u00e8gle qui <strong>informe le point d'\u00e9change dans quelle file d'attente ces messages doivent \u00eatre envoy\u00e9s<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Le protocole fonctionne au-dessus de <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\">Bri\u00e8vement sur Erlang<\/h3>\n<p><\/p>\n<p>Le code source du projet se trouve dans le r\u00e9f\u00e9rentiel sur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. L'architecture <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> est bas\u00e9e sur <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> et BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> a \u00e9t\u00e9 d\u00e9velopp\u00e9 par la soci\u00e9t\u00e9 <code>Ericsson<\/code> au milieu des ann\u00e9es 1980 comme un syst\u00e8me distribu\u00e9, tol\u00e9rant aux pannes, en temps r\u00e9el pour des applications n\u00e9cessitant une disponibilit\u00e9 de 99,999%. <code>Erlang<\/code> Il est utilis\u00e9 dans diverses industries et applications modernes, par exemple dans <code>WhatsApp<\/code>. Vous pouvez en lire davantage dans l'article <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">sur l'architecture de WhatsApp, que Facebook a achet\u00e9 pour 19 milliards de dollars<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Bri\u00e8vement sur RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 c'est un courtier de messages open source. Il route les messages selon tous les principes de base du protocole <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> d\u00e9crits dans <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">la sp\u00e9cification<\/a><\/noindex>. <code>RabbitMQ<\/code> met en \u0153uvre et compl\u00e8te le protocole. <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>L'id\u00e9e principale du mod\u00e8le de messagerie dans <code>RabbitMQ<\/code> est que <code>producer<\/code> (\u00e9diteur) n'envoie pas de messages directement dans la file d'attente. En fait, il arrive souvent que l'\u00e9diteur ne sache m\u00eame pas si le message sera livr\u00e9 \u00e0 une file d'attente. <\/p>\n<p><\/p>\n<p>Au lieu de cela, l'\u00e9diteur peut envoyer des messages uniquement \u00e0 l'\u00e9change. D'une part, l'\u00e9change re\u00e7oit des messages des \u00e9diteurs, et d'autre part, il les envoie dans les files d'attente. L'\u00e9change doit savoir exactement quoi faire avec le message re\u00e7u. Doit-il \u00eatre ajout\u00e9 \u00e0 une file d'attente sp\u00e9cifique ? Doit-il \u00eatre ajout\u00e9 \u00e0 plusieurs files d'attente ? Ou le message doit-il \u00eatre ignor\u00e9 ?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partie 1. Introduction. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le travail est bri\u00e8vement <code>RabbitMQ<\/code> d\u00e9crit comme suit :<\/p>\n<p><\/p>\n<ol>\n<li>L'\u00e9diteur envoie un message \u00e0 un \u00e9change sp\u00e9cifique<\/li>\n<li>L'\u00e9change, apr\u00e8s avoir re\u00e7u le message, le route vers une ou plusieurs files d'attente en fonction des r\u00e8gles de liaison entre lui et la file d'attente<\/li>\n<li>La file d'attente stocke une r\u00e9f\u00e9rence \u00e0 ce message. Le message lui-m\u00eame est stock\u00e9 en m\u00e9moire vive ou sur disque<\/li>\n<li>Une fois que le consommateur est pr\u00eat \u00e0 recevoir le message de la file d'attente, le serveur cr\u00e9e une copie du message \u00e0 partir de la r\u00e9f\u00e9rence et l'envoie<\/li>\n<li>Le consommateur re\u00e7oit le message et envoie une confirmation au courtier<\/li>\n<li>Le courtier, apr\u00e8s avoir re\u00e7u la confirmation, supprime la copie du message de la file d'attente. Ensuite, il la supprime de la m\u00e9moire vive et du disque<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>Processus <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 (appel de proc\u00e9dure distante)<\/a><\/noindex> est \u00e0 la base de presque toutes les interactions avec le noyau <code>RabbitMQ<\/code>. Par exemple, les discussions initiales concernant les conditions du client avec <code>RabbitMQ<\/code>, d\u00e9montre un certain processus <code>RPC<\/code>. Une fois cette s\u00e9quence termin\u00e9e, <code>RabbitMQ<\/code> il sera pr\u00eat \u00e0 recevoir des requ\u00eates du client :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partie 1. Introduction. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De plus, dans la sp\u00e9cification <code>AMQP<\/code> le client et le serveur peuvent appeler des commandes. Cela signifie que le client s'attend \u00e0 interagir avec le serveur. Les commandes sont des classes et des m\u00e9thodes. Par exemple, <code>Connection.Start<\/code> \u2013 appel de m\u00e9thode <code>Commencer<\/code> classe <code>Connexion<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Connexions et canaux<\/em><\/h4>\n<p><\/p>\n<p>Pour cet \u00e9change d'informations entre le client et le serveur, on utilise <strong>des canaux<\/strong>. Les canaux sont cr\u00e9\u00e9s dans le cadre d'une <strong>connexion sp\u00e9cifique<\/strong>. Chaque canal est isol\u00e9 des autres canaux. Dans le cas d'une ex\u00e9cution synchrone, il n'est pas possible d'ex\u00e9cuter la commande suivante tant qu'une r\u00e9ponse n'a pas \u00e9t\u00e9 re\u00e7ue. <\/p>\n<p><\/p>\n<p>Pour pouvoir envoyer des commandes en parall\u00e8le, il est n\u00e9cessaire d'ouvrir plusieurs canaux. Chaque canal cr\u00e9e un processus distinct. Une seule connexion peut avoir de nombreux canaux ( <code>Erlang<\/code> multiplexage<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\">). Pour chaque canal, il existe certaines structures et objets en m\u00e9moire. Ainsi, plus il y a de canaux dans le cadre de la connexion, plus<\/a><\/noindex>le syst\u00e8me utilise de m\u00e9moire RabbitMQ <strong>pour g\u00e9rer cette connexion.<\/strong> Un exemple simple de cr\u00e9ation d'une connexion et d'un canal \u00e0 l'aide de<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Partie 1. Introduction. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un exemple simple de cr\u00e9ation d'une connexion et d'un canal avec <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>Il est fortement d\u00e9conseill\u00e9 d'ouvrir une nouvelle connexion pour chaque op\u00e9ration, car cela <strong>entra\u00eenera des co\u00fbts \u00e9lev\u00e9s<\/strong>. Les canaux doivent \u00e9galement \u00eatre permanents, mais de nombreuses erreurs de protocole entra\u00eenent la fermeture du canal, donc la dur\u00e9e de vie d'un canal peut \u00eatre plus courte que celle d'une connexion.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>O\u00f9 est utilis\u00e9 RabbitMQ ?<\/em><\/h4>\n<p><\/p>\n<p>Dans le contexte des microservices, le protocole <code>AMQP<\/code> et son impl\u00e9mentation en <code>RabbitMQ<\/code> sont souvent utilis\u00e9s pour <strong>l'interaction asynchrone<\/strong> entre les services.<\/p>\n<p><\/p>\n<p>Dans le contexte de <code>IIOT<\/code> protocole <code>AMQP<\/code> et son impl\u00e9mentation en <code>RabbitMQ<\/code> il est utilis\u00e9 pour l'\u00e9change de donn\u00e9es entre serveurs (serveur-serveur). Le plugin est \u00e9galement utilis\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> qui est une impl\u00e9mentation du protocole <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> pour le transfert de donn\u00e9es entre un capteur et un serveur dans des environnements \u00e0 faible bande passante avec une latence \u00e9lev\u00e9e (la liste compl\u00e8te des protocoles pris en charge est \u00e9num\u00e9r\u00e9e dans <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">site du projet<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Dans le prochain article, nous allons commencer \u00e0 examiner plus en d\u00e9tail les Exchanges.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Liens<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Site du projet RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source : <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 - 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\/fr\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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. Partie 1. Introduction. Erlang, AMQP | ProHoster","description":"Bonjour, Habr ! Je veux partager un manuel de r\u00e9f\u00e9rence, un ensemble de connaissances que j'ai r\u00e9ussi \u00e0 rassembler sur RabbitMQ et \u00e0 condenser en recommandations et conclusions courtes.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}