{"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\/es\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Parte 1. Introducci\u00f3n. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Buenas tardes, Habr! Quiero compartir un manual de referencia con los conocimientos que he logrado reunir en <code>RabbitMQ<\/code> y resumir en breves recomendaciones y conclusiones. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Tabla de contenido<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Parte 1. Introducci\u00f3n. Erlang, AMQP y RPC<\/li>\n<li>RabbitMQ. Parte 2. Entendiendo Exchanges<\/li>\n<li>RabbitMQ. Parte 3. Entendiendo Queues y Bindings<\/li>\n<li>RabbitMQ. Parte 4. Entendiendo qu\u00e9 son los mensajes y los frames<\/li>\n<li>RabbitMQ. Parte 5. Rendimiento de la publicaci\u00f3n y consumo de mensajes<\/li>\n<li>RabbitMQ. Parte 6. Resumen de los m\u00f3dulos Federation y Shovel<\/li>\n<li>RabbitMQ. Parte 7. Detalles sobre Connection y Channel<\/li>\n<li>RabbitMQ. Parte 8. RabbitMQ en .NET<\/li>\n<li>RabbitMQ. Parte 9. Monitoreo<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Resumen sobre AMQP<\/h3>\n<p><\/p>\n<blockquote><p>AMQP (Advanced Message Queuing Protocol) es un protocolo abierto para el intercambio de mensajes entre componentes de un sistema. La idea principal es que subsistemas individuales (o aplicaciones independientes) puedan intercambiar mensajes arbitrariamente a trav\u00e9s de un broker AMQP, que realiza el enrutamiento, puede garantizar la entrega, distribuci\u00f3n de flujos de datos, y suscripci\u00f3n a los tipos de mensajes necesarios.<\/p><\/blockquote>\n<p>Protocolo <code>AMQP<\/code> introduce tres conceptos:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introducci\u00f3n. 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> (punto de intercambio) \u2014 donde se env\u00edan los mensajes. El punto de intercambio <strong>distribuye el mensaje<\/strong> a una o varias queues. \u00c9ste <strong>rutear\u00e1 los mensajes a la queue<\/strong> bas\u00e1ndose en las relaciones creadas (<code>binding<\/code>) entre \u00e9l y la queue<\/li>\n<li><code>queue<\/code> (cola) \u2014 estructura de datos en disco o en memoria que <strong>almacena referencias a los mensajes y entrega copias de los mensajes <code>consumidores<\/code><\/strong> (consumidores)<\/li>\n<li><code>binding<\/code> (binding) \u2014 regla que <strong>indica al punto de intercambio a cu\u00e1l de las queues deben ir esos mensajes<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>El protocolo opera sobre <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\">Resumen sobre Erlang<\/h3>\n<p><\/p>\n<p>El c\u00f3digo fuente del proyecto se encuentra en el repositorio en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Arquitectura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> se basa en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> y BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> desarrollado por la <code>Ericsson<\/code> a mediados de los a\u00f1os 80 como un sistema distribuido, tolerante a fallos, en tiempo real, para aplicaciones que requieren una operaci\u00f3n continua de 99,999%. <code>Erlang<\/code> se utiliza en diversas industrias y aplicaciones modernas, por ejemplo en <code>WhatsApp<\/code>. Se puede leer m\u00e1s sobre esto en el art\u00edculo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">la arquitectura de WhatsApp, que Facebook adquiri\u00f3 por 19 mil millones de d\u00f3lares<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">Resumen sobre RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2013 es un broker de mensajes de c\u00f3digo abierto. Enruta mensajes de acuerdo con todos los principios b\u00e1sicos del protocolo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> descritos en <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">la especificaci\u00f3n<\/a><\/noindex>. <code>RabbitMQ<\/code> implementa y complementa el protocolo <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>La idea principal del modelo de intercambio de mensajes en <code>RabbitMQ<\/code> es que <code>el productor<\/code> (el editor) no env\u00eda mensajes directamente a la cola. De hecho, a menudo el editor ni siquiera sabe si el mensaje se entregar\u00e1 a alguna cola. <\/p>\n<p><\/p>\n<p>En su lugar, el editor puede enviar mensajes solo a un intercambio. Por un lado, el intercambio recibe mensajes de los editores, y por el otro, los env\u00eda a las colas. El intercambio debe saber exactamente qu\u00e9 hacer con el mensaje recibido. \u00bfDeber\u00eda a\u00f1adirse a una cola espec\u00edfica? \u00bfDeber\u00eda a\u00f1adirse a varias colas? \u00bfO el mensaje debe ignorarse?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introducci\u00f3n. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El trabajo <code>RabbitMQ<\/code> se puede describir de la siguiente manera:<\/p>\n<p><\/p>\n<ol>\n<li>El editor env\u00eda un mensaje a un intercambio espec\u00edfico<\/li>\n<li>El intercambio, al recibir el mensaje, lo enruta a una o varias colas de acuerdo con las reglas de enlace entre \u00e9l y la cola<\/li>\n<li>La cola mantiene un enlace a este mensaje. El propio mensaje se guarda en la memoria RAM o en el disco<\/li>\n<li>Tan pronto como el consumidor est\u00e1 listo para recibir el mensaje de la cola, el servidor crea una copia del mensaje a trav\u00e9s del enlace y lo env\u00eda<\/li>\n<li>El consumidor recibe el mensaje y env\u00eda una confirmaci\u00f3n al intermediario<\/li>\n<li>El intermediario, al recibir la confirmaci\u00f3n, elimina la copia del mensaje de la cola. Luego elimina de la memoria RAM y del disco<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>RPC<\/em><\/h4>\n<p><\/p>\n<p>El proceso <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 (llamada a procedimiento remoto)<\/a><\/noindex> es la base de pr\u00e1cticamente todas las interacciones con el n\u00facleo <code>RabbitMQ<\/code>. Por ejemplo, las discusiones iniciales de los t\u00e9rminos del cliente con <code>RabbitMQ<\/code>, demuestra un proceso espec\u00edfico <code>RPC<\/code>. Una vez que esta secuencia ha finalizado, <code>RabbitMQ<\/code> estar\u00e1 listo para aceptar solicitudes del cliente:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introducci\u00f3n. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tambi\u00e9n en la especificaci\u00f3n <code>AMQP<\/code> tanto el cliente como el servidor pueden invocar comandos. Esto significa que el cliente espera interactuar con el servidor. Los comandos son clases y m\u00e9todos. Por ejemplo, <code>Connection.Start<\/code> \u2013 invocaci\u00f3n del m\u00e9todo <code>Iniciar<\/code> de la clase <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Conexi\u00f3n y canales<\/em><\/h4>\n<p><\/p>\n<p>Para tal intercambio de informaci\u00f3n entre el cliente y el servidor se utilizan <strong>canales<\/strong>. Los canales se crean dentro de <strong>una conexi\u00f3n espec\u00edfica<\/strong>. Cada canal est\u00e1 aislado de otros canales. En el caso s\u00edncrono no es posible ejecutar el siguiente comando hasta que se reciba una respuesta. <\/p>\n<p><\/p>\n<p>Para poder enviar comandos de manera paralela, es necesario abrir varios canales. Cada canal crea un proceso separado. Una conexi\u00f3n puede tener m\u00faltiples canales ( <code>Erlang<\/code> multiplexi\u00f3n<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\">)<\/a><\/noindex>). Para cada canal existen ciertas estructuras y objetos en la memoria. Por lo tanto, cuantos m\u00e1s canales haya dentro de la conexi\u00f3n, m\u00e1s <strong>memoria utiliza RabbitMQ<\/strong> para gestionar dicha conexi\u00f3n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introducci\u00f3n. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un ejemplo simple de creaci\u00f3n de una conexi\u00f3n y un canal utilizando <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>No se recomienda abrir una nueva conexi\u00f3n para cada operaci\u00f3n, ya que esto <strong>conllevar\u00e1 a altos costes<\/strong>. Los canales tambi\u00e9n deben ser permanentes, pero muchos errores de protocolo conducen al cierre del canal, por lo que la vida \u00fatil de un canal puede ser m\u00e1s corta que la de la conexi\u00f3n.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>\u00bfD\u00f3nde se utiliza RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>En el contexto de microservicios, el protocolo <code>AMQP<\/code> y su implementaci\u00f3n en <code>RabbitMQ<\/code> se utilizan a menudo para <strong>interacci\u00f3n as\u00edncrona<\/strong> entre servicios.<\/p>\n<p><\/p>\n<p>En el contexto de <code>IIOT<\/code> el protocolo <code>AMQP<\/code> y su implementaci\u00f3n en <code>RabbitMQ<\/code> se utiliza para el intercambio de datos entre servidores (servidor-servidor). Tambi\u00e9n se utiliza el complemento <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> que es una implementaci\u00f3n del protocolo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> para la transmisi\u00f3n de datos entre un sensor y un servidor en entornos de baja velocidad con alta latencia (la lista completa de protocolos compatibles est\u00e1 disponible en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">el sitio del proyecto<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>En el siguiente art\u00edculo comenzaremos a explorar m\u00e1s a fondo los Exchanges.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Enlaces<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Sitio del proyecto RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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. Parte 1. Introducci\u00f3n. Erlang, AMQP | ProHoster","description":"\u00a1Buenas tardes, Habr! Quiero compartir un manual-referencia de conocimientos que he podido recopilar sobre RabbitMQ y resumir en breves recomendaciones y conclusiones.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}