{"id":28557,"date":"2019-05-29T00:00:00","date_gmt":"2019-05-28T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28557"},"modified":"2021-06-22T17:04:13","modified_gmt":"2021-06-22T15:04:13","slug":"disaccoppiare-la-comunicazione-con-rabbitmq","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/","title":{"rendered":"Disaccoppiare la comunicazione con RabbitMQ"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28558\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"8e0c28ac-0cbc-4692-9d61-a7a2edc64c42\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=300%2C178&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28558\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il progetto a&nbsp;cui sto lavorando \u00e8 basato su di un&#8217;architettura composta da pi\u00f9 applicazioni che comunicano tra loro tramite scambio di messaggi. In genere, questa comunicazione avviene seguendo il pattern&nbsp;<em>Publish\/Subscribe<\/em>, il quale prevede che un&#8217;applicazione possa comunicare in maniera&nbsp;<em>asincrona<\/em>&nbsp;con pi\u00f9 entit\u00e0 interessate senza che ci sia accoppiamento tra le parti.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"271\" data-attachment-id=\"28561\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image1-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4.png?fit=523%2C271&amp;ssl=1\" data-orig-size=\"523,271\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image1-4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4.png?fit=300%2C155&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4.png?fit=523%2C271&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4.png?resize=523%2C271&#038;ssl=1\" alt=\"\" class=\"wp-image-28561\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4.png 523w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-4-480x249.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 523px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le entit\u00e0 coinvolte sono le seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Publisher<\/strong>&nbsp;&#8211; L&#8217;applicazione che produce il messaggio<\/li><li><strong>Message Broker<\/strong>&nbsp;&#8211; Il&nbsp;<em>MOM<\/em>(Message Oriented Middleware) che prende il messaggio e lo instrada verso un consumer<\/li><li><strong>Consumer<\/strong>&nbsp;&#8211; L&#8217;applicazione che consuma il messaggio.\u200b<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per il progetto viene utilizzato&nbsp;<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.rabbitmq.com\/\" target=\"_blank\">RabbitMQ<\/a><\/strong>, un messagging broker open source che supporta diversi protocolli e che offre numerose features. \u200b<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"291\" data-attachment-id=\"28563\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image2-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2.gif?fit=498%2C291&amp;ssl=1\" data-orig-size=\"498,291\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2.gif?fit=300%2C175&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2.gif?fit=498%2C291&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2.gif?resize=498%2C291&#038;ssl=1\" alt=\"\" class=\"wp-image-28563\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">RabbitMQ implementa il protocolo&nbsp;<strong><em>AMQP.0-9-1<\/em><\/strong>(Advanced Message Queuing Protocol), il quale prevede che i messaggi siano pubblicati verso delle entit\u00e0 di AMQP dette&nbsp;<strong><em>Exchange<\/em><\/strong>. Il ruolo degli Exchanges \u00e8 quello di distribuire, secondo determinate regole chiamate&nbsp;<strong><em>bindings<\/em><\/strong>, i messaggi ricevuti ad altre entit\u00e0 chiamate&nbsp;<strong><em>Queue<\/em><\/strong>, a cui possono sottoscriversi uno o pi\u00f9&nbsp;<em><strong>Consumer<\/strong><\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"689\" height=\"280\" data-attachment-id=\"28565\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image3-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3.jpg?fit=689%2C280&amp;ssl=1\" data-orig-size=\"689,280\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3.jpg?fit=300%2C122&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3.jpg?fit=689%2C280&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3.jpg?resize=689%2C280&#038;ssl=1\" alt=\"\" class=\"wp-image-28565\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image3.jpg 689w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-480x195.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 689px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;algoritmo di routing con il quale possono essere instradati i messaggi verso le code dipende dal tipo di exchange. In AMQP ne sono definiti quattro, oltre quello di&nbsp;<em>default<\/em>, e presentano le seguenti caratteristiche: \u200b<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Default<\/strong>: ha la peculiarit\u00e0 che ogni nuova coda creata \u00e8 collegata automaticamente ad esso con una routing key uguale al nome della coda.<\/li><li><strong>Direct<\/strong>: ideale per l&#8217;instradamento unicast. La consegna dei messaggi \u00e8 basata su una routing key.<\/li><li><strong>FanOut<\/strong>: perfetto per l&#8217;instradamento broadcast in quanto inoltra i messaggi a tutte le code ad esso bindate ignorando la routing key.<\/li><li><strong>Topic<\/strong>: utilizzato per l&#8217;instradamento multicast. La consegna dei messaggi \u00e8 basata su una routing key e un&nbsp;<em>wildcard<\/em>&nbsp;pattern utilizzato per bindare le code all&#8217;exchange.<\/li><li><strong>Headers<\/strong>: in questo caso lo scambio non \u00e8 basato sulla routing key ma su attributi espressi come message header.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sia le code che gli exchange hanno propriet\u00e0 per le quali possono sopravvivere al riavvio del broker e possono autocancellarsi rispettivamente in mancanza di consumer o di code associate. Le code inoltre possono essere esclusive, cio\u00e8 legate ad una sola connessione. \u200b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Invece di installare RabbitMQ in locale ho utilizzato un&nbsp;<em>container<\/em>&nbsp;Docker, sia per una questione di praticit\u00e0 dovuta al fatto che l&#8217;immagine dockerizzata \u00e8 gi\u00e0 pronta all&#8217;uso, sia per dare l&#8217;idea di utilizzare un broker istanziato su un&#8217;ambiente separato rispetto al publisher ed al subscriber che verranno definiti in seguito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per la creazione del container lanciamo il comando seguente con cui specifichiamo l&#8217;hostname, il suo nome e l&#8217;immagine di RabbitMQ che vogliamo istanziare: \u200b<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndocker run -d --hostname my-rabbit --name rabbit1 -p &quot;5672:5672&quot; -p &quot;15672:15672&quot; rabbitmq:3-management\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ho mappato, inoltre, la porta di default e quella della Web UI di management tra container e localhost per potervi accedere senza problemi. \u200b Ho scelto l&#8217;immagine di management proprio per la presenza di un&#8217;interfaccia web, raggiungibile all&#8217;indirizzo <a href=\"http:\/\/localhost:15672\" rel=\"nofollow\">http:\/\/localhost:15672<\/a>, con la quale \u00e8 possibile interagire e monitorare le diverse entities del broker, un alternativa pi\u00f9 intuitiva rispetto alla CLI (rabbitmqctl)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"529\" data-attachment-id=\"28568\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image5-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2.png?fit=2734%2C1412&amp;ssl=1\" data-orig-size=\"2734,1412\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image5-2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2.png?fit=300%2C155&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2.png?fit=1024%2C529&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2.png?resize=1024%2C529&#038;ssl=1\" alt=\"\" class=\"wp-image-28568\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2-980x506.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-2-480x248.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizzando degli esempi messi a disposizione sul sito di RabbitMQ ho creato due&nbsp;<em>console application<\/em>&nbsp;in&nbsp;<em>.NET Core<\/em>. Una far\u00e0 da Publisher e l&#8217;altra da Subscriber. RabbitMQ fornisce, tra gli altri, un client per il linguaggio .NET installabile mediante il gestore di pacchetti&nbsp;<em>Nuget<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analizziamo il produttore del messaggio che ho definito come&nbsp;<em>Sender<\/em>. \u200b<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nclass Sender\n{\n\u00a0\u00a0static void Main(string&#x5B;] args)\n\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0var factory = new ConnectionFactory() { HostName = &quot;localhost&quot; };\n\u00a0\u00a0\u00a0\u00a0using (var connection = factory.CreateConnection())\n\u00a0\u00a0\u00a0\u00a0using (var channel = connection.CreateModel())\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0channel.QueueDeclare(queue: &quot;QueueDemo&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0durable: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exclusive: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0autoDelete: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0arguments: null);\n\u200b\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string message = &quot;Demo Message&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var body = Encoding.UTF8.GetBytes(message);\n\u200b\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0channel.BasicPublish(exchange: &quot;&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0routingKey: &quot;QueueDemo&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0basicProperties: null,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: body);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Sent {0}&quot;, message);\n\u00a0\u00a0\u00a0\u00a0}\n\u200b\n\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot; Press &#x5B;enter] to exit.&quot;);\n\u00a0\u00a0\u00a0\u00a0Console.ReadLine();\n\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u200bCreiamo una connessione verso l&#8217;EndPoint, nel nostro caso&nbsp;<em>localhost<\/em>, istanziando una&nbsp;<em>ConnectionFactory<\/em>. Eseguendo il programma in debug possiamo vedere che verso l&#8217;endpoint viene creata una connessione con protocollo AMQP con la porta di default di RabbitMQ.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"934\" height=\"650\" data-attachment-id=\"28570\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image6-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3.png?fit=934%2C650&amp;ssl=1\" data-orig-size=\"934,650\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image6-3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3.png?fit=300%2C209&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3.png?fit=934%2C650&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3.png?resize=934%2C650&#038;ssl=1\" alt=\"\" class=\"wp-image-28570\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3.png 934w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-3-480x334.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 934px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dichiariamo quindi una coda definendo la propriet\u00e0&nbsp;<em>Name<\/em>&nbsp;(<em>QueueDemo<\/em>). Creiamo il messaggio da inviare (una semplice stringa) e nel metodo&nbsp;<em>BasicPublish<\/em>&nbsp;indichiamo l&#8217;exchange di default (con la stringa vuota), la&nbsp;<em>routing key<\/em>&nbsp;(uguale al nome della coda) e inseriamo il messaggio da pubblicare nel&nbsp;<em>body<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lanciamo l&#8217;applicazione Sender :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"226\" data-attachment-id=\"28573\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image7\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image7.png?fit=1168%2C258&amp;ssl=1\" data-orig-size=\"1168,258\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image7\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image7.png?fit=300%2C66&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image7.png?fit=1024%2C226&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image7.png?resize=1024%2C226&#038;ssl=1\" alt=\"\" class=\"wp-image-28573\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image7-1024x226.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image7-980x216.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image7-480x106.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nella schermata di&nbsp;<em>Overview<\/em>&nbsp;della WebUI notiamo che il numero delle code \u00e8 aumentato, infatti \u00e8 stata creata la coda&nbsp;<em>QueueDemo<\/em>&nbsp;\u00e8 c&#8217;\u00e8 un messaggio in coda. \u200b<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"616\" data-attachment-id=\"28575\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image8-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1.png?fit=1668%2C1004&amp;ssl=1\" data-orig-size=\"1668,1004\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image8-1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1.png?fit=300%2C181&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1.png?fit=1024%2C616&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1.png?resize=1024%2C616&#038;ssl=1\" alt=\"\" class=\"wp-image-28575\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1-980x590.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image8-1-480x289.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nei dettagli specifici di&nbsp;<em>QueueDemo<\/em>&nbsp;possiamo vedere l&#8217;exchange a cui \u00e8 collegata \u200b<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"179\" data-attachment-id=\"28577\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image9-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1.png?fit=656%2C179&amp;ssl=1\" data-orig-size=\"656,179\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image9-1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1.png?fit=300%2C82&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1.png?fit=656%2C179&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1.png?resize=656%2C179&#038;ssl=1\" alt=\"\" class=\"wp-image-28577\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1.png 656w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image9-1-480x131.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 656px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">e cliccando sul&nbsp;<em>button<\/em>&nbsp;<strong>Get Message(s)<\/strong>&nbsp;ci viene mostrato il&nbsp;<em>Payload<\/em>&nbsp;del nostro messeggio che corrisponde alla stringa creata nel Sender.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"756\" data-attachment-id=\"28579\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image10-7\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7.png?fit=1068%2C788&amp;ssl=1\" data-orig-size=\"1068,788\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image10-7\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7.png?fit=300%2C221&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7.png?fit=1024%2C756&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7.png?resize=1024%2C756&#038;ssl=1\" alt=\"\" class=\"wp-image-28579\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7-1024x756.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7-980x723.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image10-7-480x354.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il messaggio, quindi, \u00e8 correttamente accodato ed \u00e8 in attesa di essere consumato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analizziamo l&#8217;applicazione che far\u00e0 da Subscriber che ho chiamato&nbsp;<em>Receiver<\/em>. Creiamo anche qui una connessione e dichiariamo la coda&nbsp;<em>DemoQueue<\/em>. Creiamo il consumer vero e proprio mediante la classe&nbsp;<em>EventBasicConsumer<\/em>&nbsp;e con il metodo&nbsp;<em>Received<\/em>&nbsp;andiamo a definire l&#8217;evento che verr\u00e0 scatenato alla ricezione del messaggio. Per farlo assegniamo le propriet\u00e0 del&nbsp;<em>BasicDeliverEventArgs<\/em>&nbsp;<strong>ea<\/strong>&nbsp;che contiene tutte le propriet\u00e0 relative al messaggio consegnato dal broker. Infine col metodo&nbsp;<em>BasicConsume<\/em>&nbsp;avviamo il&nbsp;<em>consumer<\/em>&nbsp;appena definito. \u200b<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nclass Receiver\n{\n\u00a0\u00a0static void Main(string&#x5B;] args)\n\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0var factory = new ConnectionFactory() { HostName = &quot;localhost&quot; };\n\u00a0\u00a0\u00a0\u00a0using (var connection = factory.CreateConnection())\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0using (var channel = connection.CreateModel())\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0channel.QueueDeclare(queue: &quot;QueueDemo&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0durable: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exclusive: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0autoDelete: false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0arguments: null);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var consumer = new EventingBasicConsumer(channel);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0consumer.Received += (model, ea) =&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var body = ea.Body;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var message = Encoding.UTF8.GetString(body);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Received {0}&quot;, message);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0channel.BasicConsume(queue: &quot;QueueDemo&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0autoAck: true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0consumer: consumer);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Press &#x5B;enter] to exit.&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.ReadLine();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Eseguendo l&#8217;applicazione il messaggio viene consumato correttamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"243\" data-attachment-id=\"28582\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image11-6\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11.jpg?fit=1144%2C272&amp;ssl=1\" data-orig-size=\"1144,272\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image11\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11.jpg?fit=300%2C71&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11.jpg?fit=1024%2C243&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image11.jpg?resize=1024%2C243&#038;ssl=1\" alt=\"\" class=\"wp-image-28582\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-1024x243.jpg 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-980x233.jpg 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image11-480x114.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"616\" data-attachment-id=\"28584\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image12-4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4.png?fit=1668%2C1004&amp;ssl=1\" data-orig-size=\"1668,1004\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image12-4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4.png?fit=300%2C181&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4.png?fit=1024%2C616&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4.png?resize=1024%2C616&#038;ssl=1\" alt=\"\" class=\"wp-image-28584\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4-980x590.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image12-4-480x289.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con pi\u00f9 messaggi in coda e pi\u00f9 consumer in attesa, il&nbsp;<em>load balancing<\/em>&nbsp;viene gestito per default con uno scheduling&nbsp;<em>Round Robin<\/em>, per cui nessun consumer avr\u00e0 priorit\u00e0 rispetto agli altri. \u200b Per essere sicuri che il messaggio sia stato consegnato al consumer possiamo modificare la modalit\u00e0 di&nbsp;<em>acknowledge<\/em>&nbsp;del messaggio. All&#8217;interno del metodo&nbsp;<em>Received<\/em>&nbsp;del consumer invochiamo il metodo BasicAck con il quale viene fatto l&#8217;acknowledge del messaggio. Tra gli argomenti di questo metodo c&#8217;\u00e8 il&nbsp;<em>Delivery Tag<\/em>&nbsp;che identifica univocamente la consegna. Bisogna inoltre impostare&nbsp;nel&nbsp;<em>BasicConsume<\/em>&nbsp;l&#8217;autoAck a false. \u200b<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nchannel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u200bSulla WebUI possiamo vedere come il messaggio sia stato consumato correttamente e sia stato inviato un ack da parte del consumer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"680\" data-attachment-id=\"28587\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/attachment\/image13-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3.png?fit=1728%2C1148&amp;ssl=1\" data-orig-size=\"1728,1148\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image13-3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3.png?fit=300%2C199&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3.png?fit=1024%2C680&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3.png?resize=1024%2C680&#038;ssl=1\" alt=\"\" class=\"wp-image-28587\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3-980x651.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image13-3-480x319.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u200bRabbitMQ pu\u00f2 essere un&#8217;ottima scelta per la comunicazione tra applicazioni, microservizi o comunque tutte quelle soluzioni software per cui sia necessario utilizzare un&#8217;architettura distribuita. Come middleware open source offre moltissimi vantaggi, tra cui il disaccopiamento tra le varie entit\u00e0 per cui \u00e8 possibile farne il deploy separatamente, oppure la comunicazione asincrona che consente alle applicazioni di proseguire il flusso di esecuzione senza interruzioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A differenza della comunicazione HTTP mediante REST API, ad esempio, offre una maggiore affidabilit\u00e0 nello scambio di informazioni tra applicazioni, grazie sia a meccanismi di acknowledge e riconsegna dei messaggi sia a meccanismi di robustezza e ridondanza(cluster di nodi).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Naturalmente in questo articolo ho solo mostrato le caratteristiche di base di RabbitMQ che mi sono state utili per iniziare ad interagire con questa modalit\u00e0 di comunicazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In attesa di un articolo pi\u00f9 avanzato, vi lascio il link al repository GitHub creato per l&#8217;occasione:&nbsp;<a href=\"https:\/\/github.com\/intersect88\/IntroToRabbitMQ\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/intersect88\/IntroToRabbitMQ<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u200blla prossima<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Per disaccoppiare la comunicazione in architetture complesse possiamo usare i messaggi e farci aiutare da RabbitMQ nella loro gestione.<\/p>\n","protected":false},"author":196716251,"featured_media":28558,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_crdt_document":"","inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false},"categories":[688637374],"tags":[688637541,688637457,688637536],"class_list":["post-28557","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-dotnetcore","tag-rabbitmq","tag-swdesign"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Disaccoppiare la comunicazione con RabbitMQ - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Disaccoppiare la comunicazione con RabbitMQ - Blexin\" \/>\n<meta property=\"og:description\" content=\"Per disaccoppiare la comunicazione in architetture complesse possiamo usare i messaggi e farci aiutare da RabbitMQ nella loro gestione.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-28T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-22T15:04:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Genny Paudice\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Genny Paudice\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\"},\"author\":{\"name\":\"Genny Paudice\",\"@id\":\"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973\"},\"headline\":\"Disaccoppiare la comunicazione con RabbitMQ\",\"datePublished\":\"2019-05-28T22:00:00+00:00\",\"dateModified\":\"2021-06-22T15:04:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\"},\"wordCount\":1133,\"image\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1\",\"keywords\":[\".NetCore\",\"RabbitMQ\",\"softwaredesign\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\",\"url\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\",\"name\":\"Disaccoppiare la comunicazione con RabbitMQ - Blexin\",\"isPartOf\":{\"@id\":\"https:\/\/blexin.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-05-28T22:00:00+00:00\",\"dateModified\":\"2021-06-22T15:04:13+00:00\",\"author\":{\"@id\":\"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973\"},\"breadcrumb\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blexin.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Disaccoppiare la comunicazione con RabbitMQ\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blexin.com\/it\/#website\",\"url\":\"https:\/\/blexin.com\/it\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blexin.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973\",\"name\":\"Genny Paudice\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g\",\"caption\":\"Genny Paudice\"},\"url\":\"https:\/\/blexin.com\/it\/author\/genny-paudiceblexin-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Disaccoppiare la comunicazione con RabbitMQ - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/","og_locale":"it_IT","og_type":"article","og_title":"Disaccoppiare la comunicazione con RabbitMQ - Blexin","og_description":"Per disaccoppiare la comunicazione in architetture complesse possiamo usare i messaggi e farci aiutare da RabbitMQ nella loro gestione.","og_url":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/","og_site_name":"Blexin","article_published_time":"2019-05-28T22:00:00+00:00","article_modified_time":"2021-06-22T15:04:13+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Genny Paudice","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Genny Paudice","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/"},"author":{"name":"Genny Paudice","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973"},"headline":"Disaccoppiare la comunicazione con RabbitMQ","datePublished":"2019-05-28T22:00:00+00:00","dateModified":"2021-06-22T15:04:13+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/"},"wordCount":1133,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","keywords":[".NetCore","RabbitMQ","softwaredesign"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/","url":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/","name":"Disaccoppiare la comunicazione con RabbitMQ - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","datePublished":"2019-05-28T22:00:00+00:00","dateModified":"2021-06-22T15:04:13+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/disaccoppiare-la-comunicazione-con-rabbitmq\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Disaccoppiare la comunicazione con RabbitMQ"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973","name":"Genny Paudice","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3093a6ee7b7f555e94e4a5d6f19cb09f3af33635007643b2076eb89329789828?s=96&d=identicon&r=g","caption":"Genny Paudice"},"url":"https:\/\/blexin.com\/it\/author\/genny-paudiceblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/8e0c28ac-0cbc-4692-9d61-a7a2edc64c42.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7qB","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716251"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28557"}],"version-history":[{"count":8,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28557\/revisions"}],"predecessor-version":[{"id":33219,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28557\/revisions\/33219"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28558"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}