{"id":27248,"date":"2020-03-04T00:00:00","date_gmt":"2020-03-03T23:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=27248"},"modified":"2021-05-21T20:29:03","modified_gmt":"2021-05-21T18:29:03","slug":"un-mondo-di-messaggi-con-azure","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/","title":{"rendered":"Un mondo di messaggi con Azure"},"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=\"27252\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image00-4-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4.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=\"image00-4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-27252\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-4-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\">Negli articoli precedenti, abbiamo visto l\u2019importanza di disaccoppiare le comunicazioni in applicazioni enterprise, e abbiamo utilizzato soluzioni on-premise, come RabbitMQ e astrazioni del trasporto, come Rebus. Il cloud offre comunque strumenti nativi per la gestione dei messaggi. In Azure, in particolare, abbiamo a disposizione tre servizi che hanno proprio lo scopo, in contesti differenti, di aiutarci a realizzare questo disaccoppiamento:&nbsp;<em>Azure Service Bus<\/em>,&nbsp;<em>Azure Event Hub<\/em>&nbsp;e<em>&nbsp;Azure Event Grid<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Service Bus \u00e8 pi\u00f9 adatto in quegli scenari enterprise dove si ha la necessit\u00e0 di scambiare messaggi il cui contenuto ha un alto valore. In questi contesti, chi crea il messaggio ha interesse che venga gestito da uno specifico destinatario, facendo differenza tra un messaggio che esprime una richiesta (spesso detto comando) e un evento, sottoscrivibile dalle parti di sistema interessate a conoscere che un dato \u201cfatto\u201d \u00e8 accaduto (perfetto quindi per implementare scenari CQRS).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Event Hub e Event Grid si concentrano invece sul concetto di evento. Azure Event Hub \u00e8 pensato per gestire serie di eventi o streaming in real-time, quindi con un particolare accento sulle performance della comunicazione. \u00c8 particolarmente adatto ad applicazioni di analisi e di telemetria. Event Grid, invece, \u00e8 pensato per quelle applicazioni o servizi event-based le cui elaborazioni sono attivate da eventi che notificano un cambiamento di stato, ideale quindi per l\u2019integrazione di servizi diversi sul cloud o in scenari ibridi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analizziamoli singolarmente per farci un\u2019idea delle loro funzionalit\u00e0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Azure Service Bus<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Service Bus (ASB) \u00e8 un broker di messaggi per l\u2019integrazione enterprise, il cui scopo \u00e8 disaccoppiare applicazioni e servizi e offrire uno strumento di comunicazione affidabile per lo scambio di informazioni.<br>I messaggi possono essere inviati mediante l\u2019uso di code o di topic. Se si utilizzano code, soluzione adottata per comunicazioni di tipo end-to-end, i messaggi sono ordinati e salvati all\u2019arrivo e vengono consegnati solo quando vengono effettivamente richiesti. Si possono invece utilizzare i topics quando si vuole realizzare una comunicazione di tipo publish\/subscribe. I messaggi sono inviati al topic da un publisher ed ogni subscriber riceve una copia del messaggio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Service Bus offre diverse funzionalit\u00e0 avanzate tra le quali:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Coda di Dead-Letter<\/strong>, dove vengono salvati i messaggi che non possono essere processati.<\/li><li><strong>Consegna programmata<\/strong>, la possibilit\u00e0 di inviare i messaggi in maniera pianificata.<\/li><li><strong>Supporto alle transazioni<\/strong>: ASB \u00e8 un broker transazionale, e consente il raggruppamento di operazioni in relazione ad una delle entit\u00e0 di messaggistica quali code e topics. La transazionalit\u00e0 del broker garantisce l\u2019assenza di perdite e duplicazione dei messaggi.<\/li><li><strong>Supporto per l\u2019invio in batch<\/strong>: si pu\u00f2 ritardare l\u2019invio dei messaggi e se, in questo lasso di tempo, arrivano nuovi messaggi dal mittente verranno inviati tutti in un singolo batch.<\/li><li><strong>Eliminazione automatica della coda<\/strong>&nbsp;in caso di inattivit\u00e0.<\/li><li><strong>Rilevazione di duplicati<\/strong><\/li><li><strong>Disaster Recovery Geografico<\/strong>: in caso di downtime questa opzione permette di continuare l\u2019elaborazione in un data center presente in un&#8217;area geografica diversa.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo ora come possiamo inviare e ricevere messaggi con ASB utilizzando i topic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nell\u2019esempio, avremo un publisher che pubblica messaggi su un topic di ASB ed un subscriber che si sottoscrive ad esso.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"295\" data-attachment-id=\"27259\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-0-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-0-1.png?fit=600%2C295&amp;ssl=1\" data-orig-size=\"600,295\" 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=\"image-0-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-0-1.png?fit=600%2C295&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-0-1.png?resize=600%2C295&#038;ssl=1\" alt=\"\" class=\"wp-image-27259\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-0-1.png 600w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-0-1-480x236.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 600px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Andiamo sul portale&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/portal.azure.com\/\" target=\"_blank\">Azure<\/a>&nbsp;e creiamo una nuova risorsa Azure Service Bus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"369\" data-attachment-id=\"27257\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-1-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-1-1.png?fit=865%2C369&amp;ssl=1\" data-orig-size=\"865,369\" 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=\"image-1-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-1-1.png?fit=865%2C369&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-1-1.png?resize=865%2C369&#038;ssl=1\" alt=\"\" class=\"wp-image-27257\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-1-1.png 865w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-1-1-480x205.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 865px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cliccando su&nbsp;<em>Create<\/em>&nbsp;ci viene mostrata la schermata per creare il Namespace, ovvero un contenitore per i componenti di messaggistica.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"371\" height=\"1024\" data-attachment-id=\"27262\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-2-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-2-1.png?fit=625%2C1725&amp;ssl=1\" data-orig-size=\"625,1725\" 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=\"image-2-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-2-1.png?fit=371%2C1024&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-2-1.png?resize=371%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-27262\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Scegliamo la versione standard o premium per avere la possibilit\u00e0 di usare una comunicazione di tipo publish\/subscribe basata su topic. L\u2019opzione&nbsp;<em>Make this namespace zone redundant<\/em>&nbsp;ci consente di replicare il namespace per avere ridondanza nelle availability zones. Selezionato il namespace, creiamo un topic, scegliendo tra le&nbsp;<em>Entities<\/em>&nbsp;disponibili la voce&nbsp;<em>Topics<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"463\" height=\"195\" data-attachment-id=\"27264\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-3-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-3-1.png?fit=463%2C195&amp;ssl=1\" data-orig-size=\"463,195\" 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=\"image-3-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-3-1.png?fit=463%2C195&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-3-1.png?resize=463%2C195&#038;ssl=1\" alt=\"\" class=\"wp-image-27264\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-3-1.png?w=463&amp;ssl=1 463w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-3-1.png?resize=300%2C126&amp;ssl=1 300w\" sizes=\"auto, (max-width: 463px) 100vw, 463px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Scegliamo il nome del topic e le caratteristiche che deve avere in termini di capacit\u00e0, durata dei messaggi e rilevazione di duplicati, cliccando infine su&nbsp;<em>Create<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"861\" height=\"609\" data-attachment-id=\"27266\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-4-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-4-1.png?fit=861%2C609&amp;ssl=1\" data-orig-size=\"861,609\" 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=\"image-4-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-4-1.png?fit=861%2C609&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-4-1.png?resize=861%2C609&#038;ssl=1\" alt=\"\" class=\"wp-image-27266\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-4-1.png 861w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-4-1-480x340.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 861px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta creato il topic, possiamo creare una sottoscrizione ad esso. Troviamo la voce&nbsp;<em>Subscription<\/em>&nbsp;nelle&nbsp;<em>Entities<\/em>&nbsp;del&nbsp;<em>Topic<\/em>. Tra le opzioni di creazione, possiamo scegliere di inviare i messaggi scaduti ad una coda di sistema apposita per gestire queste situazioni, detta di&nbsp;<em>deadletter<\/em>, oppure abilitare le sessioni per avere una gestione FIFO (First-In-First-Out) dei messaggi.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"1024\" data-attachment-id=\"27269\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-5-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-5-1.png?fit=623%2C1259&amp;ssl=1\" data-orig-size=\"623,1259\" 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=\"image-5-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-5-1.png?fit=507%2C1024&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-5-1.png?resize=507%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-27269\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-5-1-507x1024.png 507w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-5-1-480x970.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 507px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nella pagina di overview del Topic, vediamo la subscription creata, e possiamo notare che il message count di tale subscription \u00e8 attualmente zero:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" data-attachment-id=\"27271\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-6-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-6-1.png?fit=2083%2C853&amp;ssl=1\" data-orig-size=\"2083,853\" 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=\"image-6-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-6-1.png?fit=1024%2C419&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-6-1.png?resize=1024%2C419&#038;ssl=1\" alt=\"\" class=\"wp-image-27271\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-6-1-980x401.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-6-1-480x197.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\">Creiamo adesso una console application che rappresenter\u00e0 il nostro Publisher, e aggiungiamo il pacchetto Nuget&nbsp;<em>Microsoft.Azure.ServiceBus<\/em>. Istanziamo un&nbsp;<em>TopicClient<\/em>&nbsp;passando come parametro la connection string del Service Bus, che si pu\u00f2 ottenere mediante il menu&nbsp;<em>Settings &gt; Shared access policies<\/em>&nbsp;del Service Bus sul portale Azure cliccando sulla Policy, e quindi sul nome del topic che abbiamo creato. Inserito il numero di messaggi che vogliamo pubblicare, non facciamo altro che invocare il metodo&nbsp;<em>SendAsync()&nbsp;<\/em>del&nbsp;<em>TopicClient<\/em>&nbsp;a cui passiamo un messaggio che verr\u00e0 inviato in maniera asincrona:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nnamespace AzureServiceBusPublisher\n{\n\u00a0\u00a0\u00a0\u00a0class Program\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureServiceBusConnectionString = &quot;MyConnectionString&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureServiceBusTopic = &quot;demotopic&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static ITopicClient topicClient;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public static async Task Main(string&#x5B;] args)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Type the number of messages that you want to publish -&gt; &quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0int numberOfMessage = int.Parse(Console.ReadLine());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0topicClient = new TopicClient(AzureServiceBusConnectionString, AzureServiceBusTopic);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (int i = 0; i &lt; numberOfMessage; i++)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string messageBody = $&quot;Demo Message {i}&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var message = new Message(Encoding.UTF8.GetBytes(messageBody));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await topicClient.SendAsync(message);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await topicClient.CloseAsync();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"297\" data-attachment-id=\"27274\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-7-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-7-1.png?fit=1835%2C533&amp;ssl=1\" data-orig-size=\"1835,533\" 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=\"image-7-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-7-1.png?fit=1024%2C297&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-7-1.png?resize=1024%2C297&#038;ssl=1\" alt=\"\" class=\"wp-image-27274\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-7-1-980x285.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-7-1-480x139.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<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"391\" data-attachment-id=\"27276\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-8-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-8-1.png?fit=2299%2C877&amp;ssl=1\" data-orig-size=\"2299,877\" 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=\"image-8-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-8-1.png?fit=1024%2C391&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-8-1.png?resize=1024%2C391&#038;ssl=1\" alt=\"\" class=\"wp-image-27276\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-8-1-980x374.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-8-1-480x183.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\">Collegandosi alla Overview di DemoTopic notiamo che il message count \u00e8 pari al numero di messaggi che abbiamo scelto di inviare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Realizziamo ora l\u2019applicazione che far\u00e0 da Subscriber, e sar\u00e0 leggermente pi\u00f9 complessa di quella realizzata per il publisher. In questo caso, istanziamo un&nbsp;<em>SubscriptionClient<\/em>&nbsp;che riceve come parametri la connection string del Service Bus, il nome del Topic e il nome della Subscription alla quale, per l\u2019appunto, ci vogliamo sottoscrivere.<br>Per fare ci\u00f2, bisogna registrare un handler di messaggi, ovvero un metodo che si occupa di processarli e che abbiamo chiamato nell\u2019esempio&nbsp;<em>ProcessMessages<\/em>. Questo metodo decodifica il messaggio, ne stampa il contenuto e completa l\u2019elaborazione del messaggio eliminandolo dalla subscription.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oltre al nome del metodo creato,&nbsp;<em>subscriptionClient.RegisterMessageHandler()<\/em>&nbsp;richiede come parametro anche un&nbsp;<em>MessageHandlerOptions<\/em>, in cui si vanno a definire alcune propriet\u00e0 del message Handler.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nnamespace AzureServiceBusSubscriber\n{\n\u00a0\u00a0\u00a0\u00a0class Program\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureServiceBusConnectionString = &quot;MyConnectionString&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureServiceBusTopic = &quot;demotopic&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureServiceBusSubscription = &quot;demoTopicSubscription&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static ISubscriptionClient subscriptionClient;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static async Task Main(string&#x5B;] args)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0subscriptionClient = new SubscriptionClient(AzureServiceBusConnectionString, AzureServiceBusTopic, AzureServiceBusSubscription);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AutoComplete = false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MaxConcurrentCalls = 1,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0subscriptionClient.RegisterMessageHandler(ProcessMessages, messageHandlerOptions);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.ReadKey();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await subscriptionClient.CloseAsync();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static async Task ProcessMessages(Message message, CancellationToken token)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string messageReceived = Encoding.UTF8.GetString(message.Body);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Received -&gt; &quot; + messageReceived);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine($&quot;Exception: {exceptionReceivedEventArgs.Exception}&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Task.CompletedTask;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Lanciamo il programma del Subscriber ed otteniamo il seguente risultato:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"359\" data-attachment-id=\"27278\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-9.png?fit=981%2C359&amp;ssl=1\" data-orig-size=\"981,359\" 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=\"image-9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-9.png?fit=981%2C359&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-9.png?resize=981%2C359&#038;ssl=1\" alt=\"\" class=\"wp-image-27278\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-9.png 981w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-9-480x176.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 981px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il message count di<em>&nbsp;DemoTopicSubscription<\/em>&nbsp;\u00e8 ritornato a zero e quindi abbiamo consumato tutti i messaggi pubblicati.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"997\" height=\"472\" data-attachment-id=\"27281\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-10\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10.png?fit=997%2C472&amp;ssl=1\" data-orig-size=\"997,472\" 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=\"image-10\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10.png?fit=997%2C472&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10.png?resize=997%2C472&#038;ssl=1\" alt=\"\" class=\"wp-image-27281\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10.png 997w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10-980x464.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-10-480x227.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 997px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Azure Event Hubs<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Event Hubs viene definito come una piattaforma di streaming di Big Data e come un servizio di&nbsp;<em>Event Ingestor<\/em>. Piattaforma, in quanto, a tutti gli effetti, \u00e8 parte della Platform-as-a-Service (PaaS), mentre Event Ingestor \u00e8 riferito al fatto che consente di disaccoppiare il producer di uno stream di eventi dal consumer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Event Hubs pu\u00f2 ricevere ed elaborare milioni di eventi al secondo e pu\u00f2 essere utilizzato sia per elaborazioni di analisi real-time o di telemetria sia per acquisire ed elaborare dati in batch o per archiviarli in uno storage (ad es. Azure Blob Storage).<br>Consente l\u2019elaborazione simultanea del flusso dati da parte di applicazioni diverse, utilizzando un modello di consumer partizionato, in cui ogni consumer legge solo un sottoinsieme specifico dello stream di eventi.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"589\" height=\"235\" data-attachment-id=\"27283\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-11\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-11.png?fit=589%2C235&amp;ssl=1\" data-orig-size=\"589,235\" 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=\"image-11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-11.png?fit=589%2C235&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-11.png?resize=589%2C235&#038;ssl=1\" alt=\"\" class=\"wp-image-27283\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-11.png 589w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-11-480x192.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 589px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gli Event Producers rappresentano qualsiasi entit\u00e0 che pu\u00f2 inviare dati all\u2019Event Hub tramite HTTP, AMQP o Apache Kafka (consente quindi di lavorare con applicazioni basate su Kafka). Le partizioni sono sequenze ordinate di eventi, ogni consumer group legge lo stream di eventi in maniera indipendente creando una vista separata dello stream per ogni applicazione interessata. Infine, ci sono gli Event Receiver ovvero le entit\u00e0 che leggono i dati dall\u2019Event Hub. Vediamo un esempio di come possiamo inviare e ricevere Eventi con Event Hubs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sul portale Azure creiamo una nuova risorsa Event Hubs.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"186\" data-attachment-id=\"27285\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-12\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-12.png?fit=446%2C186&amp;ssl=1\" data-orig-size=\"446,186\" 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=\"image-12\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-12.png?fit=446%2C186&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-12.png?resize=446%2C186&#038;ssl=1\" alt=\"\" class=\"wp-image-27285\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-12.png?w=446&amp;ssl=1 446w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-12.png?resize=300%2C125&amp;ssl=1 300w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"309\" height=\"832\" data-attachment-id=\"27288\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-13\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-13.png?fit=309%2C832&amp;ssl=1\" data-orig-size=\"309,832\" 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=\"image-13\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-13.png?fit=309%2C832&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-13.png?resize=309%2C832&#038;ssl=1\" alt=\"\" class=\"wp-image-27288\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-13.png?w=309&amp;ssl=1 309w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-13.png?resize=111%2C300&amp;ssl=1 111w\" sizes=\"auto, (max-width: 309px) 100vw, 309px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Clicchiamo su&nbsp;<em>Create&nbsp;<\/em>&nbsp;e andiamo nella sezione del&nbsp;<em>Namespace<\/em>&nbsp;appena creato per aggiungere un Event Hub.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"120\" data-attachment-id=\"27290\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-14.png?fit=623%2C120&amp;ssl=1\" data-orig-size=\"623,120\" 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=\"image-14\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-14.png?fit=623%2C120&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-14.png?resize=623%2C120&#038;ssl=1\" alt=\"\" class=\"wp-image-27290\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-14.png 623w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-14-480x92.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 623px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Diamo un nome all\u2019Event Hub e scegliamo il numero di partizioni che vogliamo utilizzare, quindi clicchiamo su&nbsp;<em>Create<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"349\" data-attachment-id=\"27292\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-15\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-15.png?fit=582%2C349&amp;ssl=1\" data-orig-size=\"582,349\" 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=\"image-15\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-15.png?fit=582%2C349&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-15.png?resize=582%2C349&#038;ssl=1\" alt=\"\" class=\"wp-image-27292\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-15.png 582w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-15-480x288.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 582px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Realizziamo adesso una console application che far\u00e0 da Event Producer. Creato il progetto, aggiungiamo il pacchetto Nuget&nbsp;<em>Azure.Messaging.EventHubs<\/em>. Come per l\u2019esempio precedente, viene chiesto all\u2019utente il numero di eventi che vuole inviare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per pubblicare gli eventi, istanziamo un&nbsp;<em>EventHubProducerClient<\/em>, che ha come parametri la stringa di connessione al namespace e il nome dell\u2019Event Hub.<br>Costruiamo successivamente un batch di eventi, che verranno inviati in maniera asincrona verso l\u2019Event Hub. Non avendo specificato nessuna partizione, questi verranno inviati alla partizione di default che viene creata automaticamente.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nnamespace EventHubsProducer\n{\n\u00a0\u00a0\u00a0\u00a0class Program\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string EventHubsConnectionString = &quot;MyConnectionString&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string EventHub = &quot;eventhubdemo&quot;;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public static async Task Main(string&#x5B;] args)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Type the number of events that you want to publish -&gt; &quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0int numberOfEvent = int.Parse(Console.ReadLine());\n\u00a0\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await using var eventHubProducerClient = new EventHubProducerClient(EventHubsConnectionString, EventHub);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0using EventDataBatch eventDataBatch = await eventHubProducerClient.CreateBatchAsync();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (int i = 0; i &lt; numberOfEvent; i++)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string eventBody = $&quot;Demo Message {i}&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventDataBatch.TryAdd(new Azure.Messaging.EventHubs.EventData(Encoding.UTF8.GetBytes(eventBody)));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await eventHubProducerClient.SendAsync(eventDataBatch);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"321\" data-attachment-id=\"27295\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-16\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-16.png?fit=978%2C321&amp;ssl=1\" data-orig-size=\"978,321\" 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=\"image-16\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-16.png?fit=978%2C321&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-16.png?resize=978%2C321&#038;ssl=1\" alt=\"\" class=\"wp-image-27295\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-16.png 978w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-16-480x158.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 978px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"962\" height=\"441\" data-attachment-id=\"27297\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-17\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-17.png?fit=962%2C441&amp;ssl=1\" data-orig-size=\"962,441\" 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=\"image-17\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-17.png?fit=962%2C441&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-17.png?resize=962%2C441&#038;ssl=1\" alt=\"\" class=\"wp-image-27297\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-17.png 962w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-17-480x220.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 962px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Come possiamo vedere dalla sezione di metriche della overview del namespace EventHUbs-Demo, abbiamo effettivamente inviato cinque messaggi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo adesso un applicazione che andr\u00e0 a consumare tali eventi. Per fare ci\u00f2, oltre ad installare il pacchetto Nuget&nbsp;<em>Azure.Messaging.EventHubs,&nbsp;<\/em>bisogna aggiungere il pacchetto&nbsp;<em>Azure.Messaging.EventHubs.Processor<\/em>&nbsp;che ci espone un&nbsp;<em>EventProcessorClient<\/em>. Questo tipo di client necessita della presenza di uno storage per poter salvare dei checkpoints in base agli eventi elaborati all\u2019interno di una partizione, in modo che l\u2019elaborazione possa, se necessario, essere ripresa da quel punto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo quindi un Azure Storage Account:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"186\" data-attachment-id=\"27300\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-18\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-18.png?fit=727%2C186&amp;ssl=1\" data-orig-size=\"727,186\" 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=\"image-18\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-18.png?fit=727%2C186&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-18.png?resize=727%2C186&#038;ssl=1\" alt=\"\" class=\"wp-image-27300\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-18.png 727w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-18-480x123.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 727px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta scelto il nome, possiamo proseguire con le impostazioni base che andranno a creare quindi lo Storage Account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"782\" height=\"711\" data-attachment-id=\"27302\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-19\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-19.png?fit=782%2C711&amp;ssl=1\" data-orig-size=\"782,711\" 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=\"image-19\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-19.png?fit=782%2C711&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-19.png?resize=782%2C711&#038;ssl=1\" alt=\"\" class=\"wp-image-27302\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-19.png 782w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-19-480x436.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 782px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo successivamente un container dal menu<em>&nbsp;Blob Service<\/em>, un tipo di archiviazione per dati non strutturati, che per il nostro esempio chiameremo&nbsp;<em>eventhubcontainer.&nbsp;<\/em>Creiamo quindi un&#8217;istanza del container che verr\u00e0 utilizzata dal&nbsp;<em>EventProcessorClient<\/em>&nbsp;insieme al&nbsp;<em>ConsumerGroup<\/em>&nbsp;(che in questo caso sar\u00e0 quello di default), la stringa di connessione del namespace e il nome del&nbsp;<em>Event Hub<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di poter iniziare a processare gli eventi, bisogna registrare obbligatoriamente gli eventi&nbsp;<em>ProcessEventAsync<\/em>&nbsp;e&nbsp;<em>ProcessErrorAsync<\/em>: il primo \u00e8 responsabile dell\u2019elaborazione degli eventi provenienti dall\u2019Event Hub, mentre il secondo si occupa degli errori.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con&nbsp;<em>StartProcessingAsync()<\/em>&nbsp;iniziamo l\u2019elaborazione, ritardandola di qualche secondo per evitare che il processo non completi correttamente l\u2019elaborazione. Terminiamo l\u2019elaborazione con il metodo&nbsp;<em>StopProcessingAsync()<\/em>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nnamespace EventHubsReceiver\n{\n\u00a0\u00a0\u00a0\u00a0class Program\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string EventHubsConnectionString = &quot;EventHubConnectionString&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string EventHub = &quot;eventhubdemo&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureBlobStorageConnectionString = &quot;AzureBlobStorageConnectionString&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string AzureBlobStorageContainer = &quot;eventhubcontainer&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public static async Task Main(string&#x5B;] args)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string eventHubConsumerClient = EventHubConsumerClient.DefaultConsumerGroupName;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0BlobContainerClient blobContainerClient = new BlobContainerClient(AzureBlobStorageConnectionString, AzureBlobStorageContainer);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventProcessorClient eventProcessorClient = new EventProcessorClient(blobContainerClient, eventHubConsumerClient, EventHubsConnectionString, EventHub);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventProcessorClient.ProcessEventAsync += ProcessingEvent;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventProcessorClient.ProcessErrorAsync += ProcessingError;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await eventProcessorClient.StartProcessingAsync();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await Task.Delay(TimeSpan.FromSeconds(10));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await eventProcessorClient.StopProcessingAsync();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0private static Task ProcessingEvent (ProcessEventArgs processEventArgs)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Received -&gt; &quot; + Encoding.UTF8.GetString(processEventArgs.Data.Body.ToArray()));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Task.CompletedTask;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0private static Task ProcessingError(ProcessErrorEventArgs processErrorEventArgs)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(processErrorEventArgs.Exception.Message);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Task.CompletedTask;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il risultato che otteniamo \u00e8 il seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"153\" data-attachment-id=\"27305\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-20\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-20.png?fit=709%2C153&amp;ssl=1\" data-orig-size=\"709,153\" 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=\"image-20\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-20.png?fit=709%2C153&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-20.png?resize=709%2C153&#038;ssl=1\" alt=\"\" class=\"wp-image-27305\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-20.png 709w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-20-480x104.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 709px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"574\" data-attachment-id=\"27307\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-21\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-21.png?fit=979%2C574&amp;ssl=1\" data-orig-size=\"979,574\" 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=\"image-21\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-21.png?fit=979%2C574&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-21.png?resize=979%2C574&#038;ssl=1\" alt=\"\" class=\"wp-image-27307\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-21.png 979w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-21-480x281.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 979px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo effettivamente consumato i messaggi prodotti in precedenza. Se guardiamo il Blob container creato in precedenza, possiamo notare il checkpoint relativo all\u2019elaborazione degli eventi.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"759\" height=\"393\" data-attachment-id=\"27309\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-22\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-22.png?fit=759%2C393&amp;ssl=1\" data-orig-size=\"759,393\" 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=\"image-22\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-22.png?fit=759%2C393&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-22.png?resize=759%2C393&#038;ssl=1\" alt=\"\" class=\"wp-image-27309\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-22.png 759w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-22-480x249.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 759px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Azure Event Grid<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Event Grid \u00e8 un connettore di eventi che consente di creare architetture event-based. La comunicazione che implementa \u00e8 di tipo publish\/subscribe.<br>Pu\u00f2 sottoscriversi a diverse risorse messe a disposizione da Azure, oppure a dei topic di eventi personalizzati (<em>Event Sources<\/em>). Tali eventi vengono poi inviati a degli event handlers che li gestiscono o li elaborano.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"568\" data-attachment-id=\"27312\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-23\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-23.png?fit=1753%2C972&amp;ssl=1\" data-orig-size=\"1753,972\" 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=\"image-23\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-23.png?fit=1024%2C568&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-23.png?resize=1024%2C568&#038;ssl=1\" alt=\"\" class=\"wp-image-27312\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-23-980x543.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-23-480x266.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\">Oltre alle caratteristiche citate, pu\u00f2 supportare un numero considerevole di subscribers e c\u2019\u00e8 la possibilit\u00e0 di filtrare gli eventi, ad esempio in base al proprio tipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo come realizzare una comunicazione publish\/subscribe con Event Grid.<br>Dal portale Azure creiamo un nuovo NameSpace che chiameremo&nbsp;<em>EventGridDemo<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"188\" data-attachment-id=\"27314\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-24\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-24.png?fit=482%2C188&amp;ssl=1\" data-orig-size=\"482,188\" 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=\"image-24\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-24.png?fit=482%2C188&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-24.png?resize=482%2C188&#038;ssl=1\" alt=\"\" class=\"wp-image-27314\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-24.png 482w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-24-480x187.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 482px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"858\" data-attachment-id=\"27317\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-25\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-25.png?fit=581%2C858&amp;ssl=1\" data-orig-size=\"581,858\" 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=\"image-25\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-25.png?fit=581%2C858&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-25.png?resize=581%2C858&#038;ssl=1\" alt=\"\" class=\"wp-image-27317\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-25.png 581w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-25-480x709.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 581px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A differenza degli altri due Servizi, per&nbsp;<em>Event Grid<\/em>&nbsp;partiremo dal Subscriber.<br>Il Subscriber sar\u00e0 infatti una Azure Function, servizio di Azure che consente di eseguire codice senza doversi preoccupare dell\u2019infrastruttura, creando quelle che vengono definite applicazioni Serverless. Inoltre, questo tipo di funzioni sono event-driven, in quanto vengono scatenate da trigger, generati in base al verificarsi di diversi tipi di eventi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo quindi un nuovo progetto da Visual Studio e scegliamo come template&nbsp;<em>Azure Function<\/em>. Scelto il nome dell\u2019applicazione, ci viene chiesto di scegliere il tipo di trigger che azioner\u00e0 la funzione: in questo esempio abbiamo scelto di utilizzare un trigger HTTP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"573\" height=\"79\" data-attachment-id=\"27319\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-26\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-26.png?fit=573%2C79&amp;ssl=1\" data-orig-size=\"573,79\" 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=\"image-26\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-26.png?fit=573%2C79&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-26.png?resize=573%2C79&#038;ssl=1\" alt=\"\" class=\"wp-image-27319\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-26.png 573w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-26-480x66.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 573px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo un&nbsp;<em>EventGridSubscriber&nbsp;<\/em>e un mapping con un topic personalizzato,&nbsp;<em>Demo.Message<\/em>, dal quale vogliamo leggere gli eventi di tipo&nbsp;<em>DemoEvent<\/em>. Utilizziamo poi il metodo&nbsp;<em>DeserializeEventGridEvents()<\/em>&nbsp;per de-serializzare gli eventi della Event Grid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Successivamente, andiamo a valutare ogni singolo evento, quando incontriamo un evento del tipo&nbsp;<em>DemoEvent&nbsp;<\/em>ne stampiamo l\u2019<em>EventMessage<\/em>. Una volta terminata l\u2019elaborazione degli eventi, inviamo un 200 OK HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 importante creare una risposta&nbsp;<em>SubscriptionValidationResponse&nbsp;<\/em>per gli eventi del tipo&nbsp;<em>SubscriptionValidationEventData&nbsp;<\/em>per completare l\u2019handshake di sottoscrizione agli eventi.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nclass DemoEvent\n{\n\u00a0\u00a0\u00a0\u00a0&#x5B;JsonProperty(PropertyName = &quot;eventMessage&quot;)]\n\u00a0\u00a0\u00a0\u00a0public string EventMessage { get; set; }\n}\n\u00a0\nnamespace EventGridDemoSubscriber\n{\n\u00a0\u00a0\u00a0\u00a0public static class Function1\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#x5B;FunctionName(&quot;Function1&quot;)]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public static async Task&lt;HttpResponseMessage&gt; Run(&#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;get&quot;, &quot;post&quot;, Route = null)]HttpRequestMessage req, TraceWriter log)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const string CustomTopicEvent = &quot;Demo.Message&quot;;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.Info(&quot;C# HTTP trigger function processed a request.&quot;);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string requestEvent = await req.Content.ReadAsStringAsync();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventGridSubscriber eventGridSubscriber = new EventGridSubscriber();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventGridSubscriber.AddOrUpdateCustomEventMapping(CustomTopicEvent, typeof(DemoEvent));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventGridEvent&#x5B;] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestEvent);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0foreach (EventGridEvent eventGridEvent in eventGridEvents)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (eventGridEvent.Data is SubscriptionValidationEventData)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var eventData = (SubscriptionValidationEventData)eventGridEvent.Data;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var responseData = new SubscriptionValidationResponse()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ValidationResponse = eventData.ValidationCode\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return req.CreateResponse(HttpStatusCode.OK, responseData);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else if (eventGridEvent.Data is DemoEvent)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var eventData = (DemoEvent)eventGridEvent.Data;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.Info(&quot;Received -&gt; &quot; + eventData.EventMessage);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return req.CreateResponse(HttpStatusCode.OK);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Andiamo sulla solution e, cliccando con il tasto destro sul progetto, scegliamo l\u2019opzione&nbsp;<em>Publish<\/em>. In questo modo, potremo pubblicare la nostra Azure Function.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"797\" height=\"594\" data-attachment-id=\"27322\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-27\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-27.png?fit=797%2C594&amp;ssl=1\" data-orig-size=\"797,594\" 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=\"image-27\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-27.png?fit=797%2C594&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-27.png?resize=797%2C594&#038;ssl=1\" alt=\"\" class=\"wp-image-27322\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-27.png 797w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-27-480x358.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 797px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pubblicata la function su Azure, andiamo sull<em>\u2019Event Grid Topic<\/em>&nbsp;creato in precedenza e creiamo una&nbsp;<em>Event Subscription<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"662\" data-attachment-id=\"27325\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-28\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28.png?fit=1036%2C670&amp;ssl=1\" data-orig-size=\"1036,670\" 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=\"image-28\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28.png?fit=1024%2C662&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28.png?resize=1024%2C662&#038;ssl=1\" alt=\"\" class=\"wp-image-27325\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28-1024x662.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28-980x634.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-28-480x310.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\">Digitiamo un nome e scegliamo WebHook come endpoint type, ovvero un endpoint HTTP che nel nostro caso coincide con l\u2019url della Azure Function pubblicata in precedenza.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"457\" data-attachment-id=\"27327\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-29\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-29.png?fit=887%2C457&amp;ssl=1\" data-orig-size=\"887,457\" 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=\"image-29\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-29.png?fit=887%2C457&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-29.png?resize=887%2C457&#038;ssl=1\" alt=\"\" class=\"wp-image-27327\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-29.png 887w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-29-480x247.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 887px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo cos\u00ec creato una subscription che possiamo visualizzare nella pagina di overview dell\u2019Event Grid Topic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"986\" height=\"508\" data-attachment-id=\"27330\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-30\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30.png?fit=986%2C508&amp;ssl=1\" data-orig-size=\"986,508\" 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=\"image-30\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30.png?fit=986%2C508&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30.png?resize=986%2C508&#038;ssl=1\" alt=\"\" class=\"wp-image-27330\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30.png 986w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30-980x505.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-30-480x247.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 986px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Realizziamo adesso la console application che sar\u00e0 il nostro publisher. Creaiamo un&nbsp;<em>EventGridClient<\/em>&nbsp;e utilizziamo il metodo&nbsp;<em>PublishEventsAsync<\/em>&nbsp;a cui passiamo l\u2019indirizzo dell\u2019Endpoint e un metodo che restituisce una lista di&nbsp;<em>EventGridEvent<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nnamespace EventGridDemoPublisher\n{\n\u00a0\u00a0\u00a0\u00a0class DemoEvent\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#x5B;JsonProperty(PropertyName = &quot;eventMessage&quot;)]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0public string EventMessage { get; set; }\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0class Program\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static void Main(string&#x5B;] args)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string topicEndpoint = &quot;EndpointAddress&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string topicKey = &quot;topickey&quot;;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string topicEndpointHost = new Uri(topicEndpoint).Host;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TopicCredentials topicCredentials = new TopicCredentials(topicKey);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventGridClient eventGridClient = new EventGridClient(topicCredentials);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventGridClient.PublishEventsAsync(topicEndpointHost, CreateEventList()).GetAwaiter().GetResult();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.Write(&quot;Published events to Event Grid topic.&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.ReadLine();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static IList&lt;EventGridEvent&gt; CreateEventList()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Type the number of events that you want to publish -&gt; &quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0int numberOfEvent = int.Parse(Console.ReadLine());\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0List&lt;EventGridEvent&gt; eventGridEventsList = new List&lt;EventGridEvent&gt;();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (int i = 0; i &lt; numberOfEvent; i++)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0eventGridEventsList.Add(new EventGridEvent()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Id = Guid.NewGuid().ToString(),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventType = &quot;Demo.Message&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Data = new DemoEvent()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventMessage = $&quot;Demo message {i}&quot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0EventTime = DateTime.Now\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return eventGridEventsList;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Lanciamo il Publisher:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"617\" height=\"195\" data-attachment-id=\"27332\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-31\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-31.png?fit=617%2C195&amp;ssl=1\" data-orig-size=\"617,195\" 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=\"image-31\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-31.png?fit=617%2C195&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-31.png?resize=617%2C195&#038;ssl=1\" alt=\"\" class=\"wp-image-27332\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-31.png 617w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-31-480x152.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 617px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">E, allo stesso modo, lanciamo la nostra Azure Function:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"646\" data-attachment-id=\"27335\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-32\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32.png?fit=1125%2C710&amp;ssl=1\" data-orig-size=\"1125,710\" 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=\"image-32\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32.png?fit=1024%2C646&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32.png?resize=1024%2C646&#038;ssl=1\" alt=\"\" class=\"wp-image-27335\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32-1024x646.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32-980x618.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-32-480x303.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\">Come possiamo vedere, sono stati ricevuti i cinque messaggi pubblicati verso l\u2019Event Grid Topic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"892\" height=\"783\" data-attachment-id=\"27337\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/attachment\/image-33\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-33.png?fit=892%2C783&amp;ssl=1\" data-orig-size=\"892,783\" 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=\"image-33\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-33.png?fit=892%2C783&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image-33.png?resize=892%2C783&#038;ssl=1\" alt=\"\" class=\"wp-image-27337\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-33.png 892w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image-33-480x421.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 892px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusioni<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finisce qui la nostra panoramica su come gestire eventi in Azure. Abbiamo sicuramente solo scalfito la superficie, ma l\u2019idea era quella di darvi le informazioni basilari per scegliere il servizio che meglio si adatta alle vostre esigenze e partire da l\u00ec. Vi consiglio di provare almeno una volta tutti e tre i servizi, magari con il codice utilizzato negli esempi che trovate qui:&nbsp;<a href=\"https:\/\/github.com\/intersect88\/AzureMessagingService\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/intersect88\/AzureMessagingService<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alla prossima!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo insieme gli strumenti che ci mette a disposizione Azure per la gestione dei messaggi<\/p>\n","protected":false},"author":196716251,"featured_media":27250,"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_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,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637377,688637382,688637449,688637536],"class_list":["post-27248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-azure","tag-c","tag-cloud","tag-swdesign"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Un mondo di messaggi con Azure - 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\/un-mondo-di-messaggi-con-azure\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un mondo di messaggi con Azure - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo insieme gli strumenti che ci mette a disposizione Azure per la gestione dei messaggi\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-03T23:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-21T18:29:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608\" \/>\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=\"14 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/\"},\"author\":{\"name\":\"Genny Paudice\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/ae0e97a3ebb79d2f73e4411c1eb28973\"},\"headline\":\"Un mondo di messaggi con Azure\",\"datePublished\":\"2020-03-03T23:00:00+00:00\",\"dateModified\":\"2021-05-21T18:29:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/\"},\"wordCount\":2172,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-3.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Azure\",\"C#\",\"Cloud\",\"softwaredesign\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/\",\"name\":\"Un mondo di messaggi con Azure - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-3.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2020-03-03T23:00:00+00:00\",\"dateModified\":\"2021-05-21T18:29:03+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/ae0e97a3ebb79d2f73e4411c1eb28973\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-3.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image00-3.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/un-mondo-di-messaggi-con-azure\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Un mondo di messaggi con Azure\"}]},{\"@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":"Un mondo di messaggi con Azure - 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\/un-mondo-di-messaggi-con-azure\/","og_locale":"it_IT","og_type":"article","og_title":"Un mondo di messaggi con Azure - Blexin","og_description":"Vediamo insieme gli strumenti che ci mette a disposizione Azure per la gestione dei messaggi","og_url":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/","og_site_name":"Blexin","article_published_time":"2020-03-03T23:00:00+00:00","article_modified_time":"2021-05-21T18:29:03+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608","type":"image\/png"}],"author":"Genny Paudice","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Genny Paudice","Tempo di lettura stimato":"14 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/"},"author":{"name":"Genny Paudice","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973"},"headline":"Un mondo di messaggi con Azure","datePublished":"2020-03-03T23:00:00+00:00","dateModified":"2021-05-21T18:29:03+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/"},"wordCount":2172,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608&ssl=1","keywords":["Azure","C#","Cloud","softwaredesign"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/","url":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/","name":"Un mondo di messaggi con Azure - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608&ssl=1","datePublished":"2020-03-03T23:00:00+00:00","dateModified":"2021-05-21T18:29:03+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/ae0e97a3ebb79d2f73e4411c1eb28973"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image00-3.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/un-mondo-di-messaggi-con-azure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Un mondo di messaggi con Azure"}]},{"@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\/image00-3.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-75u","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27248","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=27248"}],"version-history":[{"count":21,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27248\/revisions"}],"predecessor-version":[{"id":27828,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/27248\/revisions\/27828"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/27250"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=27248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=27248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=27248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}