{"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\/it\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","title":{"rendered":"RabbitMQ. Parte 1. Introduzione. Erlang, AMQP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Buongiorno, Habr! Voglio condividere un manuale di riferimento con le conoscenze che sono riuscito a raccogliere su <code>RabbitMQ<\/code> e a comprimere in brevi raccomandazioni e conclusioni. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"oglavlenie\">Indice<\/h3>\n<p><\/p>\n<ul>\n<li>RabbitMQ. Parte 1. Introduzione. Erlang, AMQP e RPC<\/li>\n<li>RabbitMQ. Parte 2. Approfondiamo gli Exchanges<\/li>\n<li>RabbitMQ. Parte 3. Approfondiamo Queues e Bindings<\/li>\n<li>RabbitMQ. Parte 4. Approfondiamo che cosa sono i messaggi e i frame<\/li>\n<li>RabbitMQ. Parte 5. Performance di pubblicazione e consumo dei messaggi<\/li>\n<li>RabbitMQ. Parte 6. Panoramica sui moduli Federation e Shovel<\/li>\n<li>RabbitMQ. Parte 7. Dettagli su Connection e Channel<\/li>\n<li>RabbitMQ. Parte 8. RabbitMQ in .NET<\/li>\n<li>RabbitMQ. Parte 9. Monitoraggio<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"kratko-pro-amqp\">Breve introduzione all'AMQP<\/h3>\n<p><\/p>\n<blockquote><p>L'AMQP (Advanced Message Queuing Protocol) \u00e8 un protocollo aperto per la trasmissione di messaggi tra i componenti di un sistema. L'idea principale \u00e8 che singole sotto-sistemi (o applicazioni indipendenti) possano scambiarsi liberamente messaggi tramite un broker AMQP, che effettua il routing, garantisce la consegna, distribuisce flussi di dati e consente la sottoscrizione ai tipi di messaggi desiderati.<\/p><\/blockquote>\n<p>Protocollo <code>AMQP<\/code> introduce tre concetti:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introduzione. 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> (exchange) \u2014 cui vengono inviati i messaggi. L'exchange <strong>distribuisce il messaggio<\/strong> in una o pi\u00f9 code. Essa <strong>instrada i messaggi alla coda<\/strong> sulla base delle relazioni create (<code>binding<\/code>) tra esso e la coda<\/li>\n<li><code>queue<\/code> (queue) \u2014 una struttura dati su disco o in memoria, che <strong>memorizza i riferimenti ai messaggi e restituisce copie dei messaggi <code>consumatori<\/code><\/strong> (ai consumatori)<\/li>\n<li><code>binding<\/code> (binding) \u2014 una regola che <strong>comunica all'exchange in quale delle code questi messaggi devono andare<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Il protocollo funziona sopra <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\">Breve introduzione a Erlang<\/h3>\n<p><\/p>\n<p>Il codice sorgente del progetto si trova nel repository su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\">GitHub<\/a><\/noindex>. Architettura <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/rabbitmq-server\">RabbitMQ-server<\/a><\/noindex> \u00e8 basata su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.erlang.org\/\">Erlang<\/a><\/noindex> e BEAM.<\/p>\n<p><\/p>\n<blockquote><p><code>Erlang<\/code> sviluppato dall'azienda <code>Ericsson<\/code> alla met\u00e0 degli anni '80 come sistema distribuito, resistente ai guasti, in tempo reale per applicazioni che richiedono un'affidabilit\u00e0 del 99,999%. <code>Erlang<\/code> viene utilizzato in vari settori e applicazioni moderne, come ad esempio in <code>WhatsApp<\/code>. \u00c8 possibile leggere di pi\u00f9 nell'articolo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276951\/\">l'architettura di WhatsApp, acquistata da Facebook per $19 miliardi<\/a><\/noindex><\/p><\/blockquote>\n<p><\/p>\n<h3 id=\"kratko-pro-rabbitmq\">In breve su RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u00e8 un broker di messaggi open source. Instrada i messaggi secondo i principi di base del protocollo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AMQP\">AMQP<\/a><\/noindex> descritti in <noindex><a rel=\"nofollow\" href=\"http:\/\/www.amqp.org\/resources\/download\">specifiche<\/a><\/noindex>. <code>RabbitMQ<\/code> implementa e completa il protocollo <code>AMQP<\/code>.<\/p>\n<p><\/p>\n<p>L'idea principale del modello di scambio di messaggi in <code>RabbitMQ<\/code> \u00e8 che <code>il produttore<\/code> (pubblicatore) non invia messaggi direttamente in coda. In realt\u00e0, e molto spesso, il pubblicatore non sa nemmeno se il messaggio verr\u00e0 consegnato a qualche coda. <\/p>\n<p><\/p>\n<p>Invece, il publisher pu\u00f2 inviare messaggi solo al broker. Da un lato, il broker riceve messaggi dai publisher e, dall'altro, li invia alle code. Il broker deve sapere esattamente cosa fare con il messaggio ricevuto. Deve essere aggiunto a una coda specifica? Deve essere aggiunto a pi\u00f9 code? O il messaggio deve essere ignorato.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introduzione. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/1deaebddebde216b8f706953ddf2d3c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il funzionamento pu\u00f2 essere descritto brevemente come segue: <code>RabbitMQ<\/code> pu\u00f2 essere descritto nel seguente modo:<\/p>\n<p><\/p>\n<ol>\n<li>Il publisher invia un messaggio a un broker specifico.<\/li>\n<li>Il broker, ricevuto il messaggio, lo instrada in una o pi\u00f9 code secondo le regole di binding tra esso e la coda.<\/li>\n<li>La coda mantiene un riferimento a questo messaggio. Il messaggio stesso \u00e8 memorizzato in memoria volatile o su disco.<\/li>\n<li>Non appena il consumatore \u00e8 pronto a ricevere un messaggio dalla coda, il server crea una copia del messaggio in base al riferimento e lo invia.<\/li>\n<li>Il consumatore riceve il messaggio e invia una conferma al broker.<\/li>\n<li>Il broker, ricevuta la conferma, rimuove la copia del messaggio dalla coda. Successivamente, lo elimina dalla memoria e dal disco.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"rpc\"><em>richiesta RPC<\/em><\/h4>\n<p><\/p>\n<p>Processo <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> \u00e8 alla base di praticamente tutte le interazioni con il kernel. <code>RabbitMQ<\/code>. Ad esempio, le prime discussioni sui termini del cliente con <code>RabbitMQ<\/code>, dimostra un processo specifico <code>richiesta RPC<\/code>. Una volta che questa sequenza \u00e8 completata, <code>RabbitMQ<\/code> sar\u00e0 pronta a ricevere richieste dal cliente:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introduzione. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/059f37304f45a1f0ff625b671f6462ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inoltre, nella specifica <code>AMQP<\/code> sia il cliente che il server possono invocare comandi. Ci\u00f2 significa che il cliente si aspetta un'interazione con il server. I comandi sono classi e metodi. Ad esempio, <code>Connection.Start<\/code> \u2013 invocazione del metodo <code>Inizia<\/code> classe <code>Connection<\/code>.<\/p>\n<p><\/p>\n<h4 id=\"podklyuchenie-i-kanaly\"><em>Connessione e canali<\/em><\/h4>\n<p><\/p>\n<p>Per tale scambio di informazioni tra cliente e server si utilizzano <strong>canali<\/strong>. I canali vengono creati all'interno di <strong>una connessione specifica<\/strong>. Ogni canale \u00e8 isolato dagli altri canali. Nel caso sincrono, non \u00e8 possibile eseguire il comando successivo fino a quando non viene ricevuta una risposta. <\/p>\n<p><\/p>\n<p>Per essere in grado di inviare comandi in parallelo, \u00e8 necessario aprire pi\u00f9 canali. Ogni canale crea un <code>Erlang<\/code> processo separato. Una connessione pu\u00f2 avere molti canali (<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>). Per ogni canale ci sono determinate strutture e oggetti in memoria. Pertanto, maggiore \u00e8 il numero di canali all'interno di una connessione, maggiore \u00e8 <strong>la memoria utilizzata da RabbitMQ<\/strong> per gestire tale connessione.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ. Parte 1. Introduzione. Erlang, AMQP\" src=\"\/wp-content\/uploads\/2020\/02\/9bc388200f4f82eb8f98cb1dd1580675.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un esempio semplice di creazione di una connessione e di un canale utilizzando <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>Aprire una nuova connessione per ogni operazione \u00e8 fortemente sconsigliato, poich\u00e9 questo <strong>porter\u00e0 a costi elevati<\/strong>. I canali devono essere permanenti, ma molti errori di protocollo portano alla chiusura del canale, quindi la durata del canale pu\u00f2 essere inferiore a quella della connessione.<\/p>\n<p><\/p>\n<h4 id=\"gde-ispolzuetsya-rabbitmq\"><em>Dove viene utilizzato RabbitMQ?<\/em><\/h4>\n<p><\/p>\n<p>Nel contesto dei microservizi, il protocollo <code>AMQP<\/code> e la sua implementazione in <code>RabbitMQ<\/code> viene spesso utilizzato per <strong>l'interazione asincrona<\/strong> tra i servizi.<\/p>\n<p><\/p>\n<p>Nel contesto <code>IIOT<\/code> protocollo <code>AMQP<\/code> e la sua implementazione in <code>RabbitMQ<\/code> viene utilizzato per lo scambio di dati tra server (server-server). Si usa anche il plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/mqtt.html\">MQTT Plugin RabbitMQ<\/a><\/noindex> che \u00e8 un'implementazione del protocollo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/MQTT\">MQTT<\/a><\/noindex> per la trasmissione di dati tra un sensore e un server in ambienti a bassa velocit\u00e0 con alta latenza (l'elenco completo dei protocolli supportati \u00e8 riportato su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/protocols.html\">sito del progetto<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Nell'articolo successivo inizieremo a esaminare pi\u00f9 in dettaglio gli Exchanges.<\/p>\n<p><\/p>\n<h3 id=\"ssylki\">Link<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">Sito del progetto RabbitMQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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. Introduzione. Erlang, AMQP | ProHoster","description":"Buongiorno, Habr! Voglio condividere un manuale di riferimento delle conoscenze che sono riuscito a raccogliere su RabbitMQ e sintetizzare in brevi raccomandazioni e conclusioni. Indice RabbitMQ. Parte 1. Introduzione. Erlang, AMQP e RPC RabbitMQ. Parte 2. Approfondiamo gli Exchanges RabbitMQ. Parte 3. Approfondiamo le Code e i Bindings RabbitMQ. Parte 4. Approfondiamo cosa sono i messaggi e i frame RabbitMQ. Parte","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/rabbitmq-chast-1-introduction-erlang-amqp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/69346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=69346"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/69346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/69347"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=69346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=69346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=69346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}