{"id":32935,"date":"2021-05-25T18:20:00","date_gmt":"2021-05-25T16:20:00","guid":{"rendered":"https:\/\/blexin.com\/?p=32935"},"modified":"2021-05-28T10:02:01","modified_gmt":"2021-05-28T08:02:01","slug":"masstransit-un-caso-duso-reale","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/","title":{"rendered":"Mass Transit: un caso d\u2019uso reale"},"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=\"32936\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/10_ita_1105x656_blog-masstransit\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&amp;ssl=1\" data-orig-size=\"1105,656\" 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=\"10_ITA_1105x656_blog masstransit\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?resize=1024%2C608&#038;ssl=1\" alt=\"mass transit\" class=\"wp-image-32936\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit-1024x608.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit-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\">In questo ultimo anno e mezzo, ho avuto l\u2019opportunit\u00e0 di lavorare per un cliente che ha un\u2019architettura fortemente orientata ai microservizi per supportare il proprio sistema composto da svariate applicazione e servizi tra loro indipendenti, che interoperano in maniera asincrona sfruttando un Service Bus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un Service Bus rappresenta un servizio di integrazione in grado di permettere l\u2019interoperabilit\u00e0 tra componenti eterogenei dislocati in un sistema distribuito. Quando un\u2019applicazione necessita di inviare un messaggio, lo far\u00e0 semplicemente utilizzando un apposito metodo del Service Bus che, internamente, si occuper\u00e0 di dirottarlo verso uno o pi\u00f9 endpoints in grado di gestirlo. Dal punto di vista dell\u2019applicazione che invece deve gestire il messaggio, il Service Bus dovr\u00e0 essere in grado di prelevare i messaggi e innescare dei processi atti a elaborarli e, in caso di messaggio gestito correttamente, segnalare al broker che il messaggio pu\u00f2 essere cancellato; oppure, in caso l\u2019elaborazione non vada a buon fine, in base alla configurazione delle policy di gestione degli errori, applicare delle strategie per la rielaborazione del messaggio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il cliente in questione usa come implementazione di Service Bus il framework MassTransit. Nello specifico, nei progetti su cui abbiamo lavorato, lo abbiamo utilizzato per integrare un\u2019app web con un windows service affinch\u00e9 alcune operazioni molto lente venissero gestite da quest\u2019ultimo senza impattare sulla web application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo framework ci offre, oltre alle funzionalit\u00e0 di base che ogni Service Bus dovrebbe mettere a disposizione, altre importanti funzionalit\u00e0 come:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Gestione di eccezioni, retries e messaggi poisoned in modo trasparente;<\/li><li>Consumatori concorrenti (competing consumer pattern);<\/li><li>Gestione delle saghe.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per un elenco completo, vi consiglio di dare un\u2019occhiata a <a href=\"https:\/\/masstransit-project.com\/\/understand\/additions-to-transport.html\" target=\"_blank\" rel=\"noreferrer noopener\">questo link<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un caso d&#8217;uso reale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nell\u2019esempio che vi propongo, avremo una web app implementata con Razor Pages, che dar\u00e0 la possibilit\u00e0 all\u2019utente di creare dei meetings. Creato il meeting, vogliamo inviare delle emails e delle notifiche SMS agli invitati, ma vogliamo che queste operazioni non impattino sulla web app e che vengano invece effettuate da servizi creati appositamente per questo tipo di task. La web application invier\u00e0 un messaggio sfruttando MassTransit. Sar\u00e0 poi compito del framework instradare il messaggio attraverso l\u2019infrastruttura di trasporto (Azure Service Bus, Amazon SQS, RabbitMQ). I servizi che consumeranno questi messaggi saranno due applicazioni console: una simuler\u00e0 l\u2019invio di emails e l\u2019altra l\u2019invio di sms. Attraverso MassTransit, creeremo quindi due consumers che potranno gestire il tipo di messaggio pubblicato dalla web app. Nell\u2019articolo troverete solamente il codice relativo a MassTransit, verr\u00e0 quindi omesso il codice relativo alla UI; inoltre, dato che i consumers saranno pressoch\u00e9 simili, ci focalizzeremo solamente sul codice dell\u2019EmailSender. Potete trovare per\u00f2 il codice completo sul <a href=\"https:\/\/github.com\/claudiom248\/MassTransitIntro\" target=\"_blank\" rel=\"noreferrer noopener\">mio repository<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Web Application (Publisher)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La nostra web app sar\u00e0 responsabile dell\u2019invio di un messaggio attraverso il nostro service bus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019istanza del bus verr\u00e0 iniettata nel costruttore e sar\u00e0 di tipo IBus. Questa interfaccia contiene le definizioni dei metodi necessari per poter inviare messaggi attraverso il bus.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic IndexModel(IBus bus){    _bus = bus;} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dopo aver cliccato un bottone della UI, verr\u00e0 triggerato un handler method che invia il messagio.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic async Task&lt;IActionResult&gt; OnPostCreateMeetingAsync()\n{\n        var message = new MeetingCreatedMessage(Title, Creator, Participants?.Split(&#039;,&#039;), StartsOn, EndsOn); \n        await SendMessage(message);    \n        return Page();\n}\n\nprivate async Task SendMessage(MeetingCreatedMessage message)\n{\n        try\n        {\n                await _bus.Publish(message);\n                MessageSent = true;\n        }\n        catch\n        {\n                MessageSent = false;    \n        }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il messaggio che spediremo sar\u00e0 di tipo<em> MeetingCreatedMessage <\/em>e verr\u00e0 pubblicato; ci\u00f2 significa che utilizzeremo il modello di comunicazione publish\/subscibe, ideale per il nostro caso d\u2019uso, poich\u00e9 il messaggio avr\u00e0 pi\u00f9 consumers che dovranno gestirlo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">EmailSender Console Application (Consumer1)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La nostra prima console application, sar\u00e0 il consumer responsabile di \u201cinviare\u201d le mail ai partecipanti del meeting. In questo progetto avremo una classe che si occuper\u00e0 del consumo del messaggio.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class MeetingCreatedMessageConsumer : IConsumer&lt;MeetingCreatedMessage&gt; \n{  ...  }\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Come vedete, la classe implementa <strong>IConsumer&lt;MeetingCreatedMessage&gt;<\/strong>, un\u2019interfaccia di MassTransit che indica che il nostro consumer sar\u00e0 in grado di elaborare i messaggi del <em>type parameter <\/em>specificato.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic async Task Consume(ConsumeContext&lt;MeetingCreatedMessage&gt; context)\n{\n        var meeting = context.Message; \n        \n        if (IsMeetingAlreadyEnded(meeting))    \n        {\n                return;\n        }\n        \n        var emails = CreateEmails(meeting);\n        await SendEmails(emails);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Quando un messaggio sar\u00e0 disponibile nella coda a cui l\u2019applicazione \u00e8 agganciata, il middleware di MassTransit, leggendone il tipo nei metadati, individuer\u00e0 il consumer che pu\u00f2 gestire il tipo di messaggio e richiamer\u00e0 il metodo Consume.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuriamo MassTransit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Negli snippets precedenti, abbiamo visto come pubblicare e come consumare un messaggio con MassTransit, ma non \u00e8 finita qui: ci\u00f2 che abbiamo visto finora \u00e8 il codice che sfrutta il middleware per pubblicare\/consumare messaggi ed \u00e8 il codice indipendente dalla tecnologia di trasporto che utilizziamo. Ci\u00f2 che ci manca \u00e8 configurare il middleware di MassTransit per specificare il tipo di trasporto, i suoi settaggi e gli endpoints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notate che per ogni trasporto che volete utilizzare, dovrete installare l\u2019apposito Nuget package di Masstransit, altrimenti non troverete gli extension methods che vi permettono di costruire l\u2019istanza del bus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trasporto con Azure Service Bus<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"302\" data-attachment-id=\"32949\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/02-asb-resource-group\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/02-asb-resource-group.png?fit=1920%2C567&amp;ssl=1\" data-orig-size=\"1920,567\" 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=\"02-asb-resource-group\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/02-asb-resource-group.png?fit=1024%2C302&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/02-asb-resource-group.png?resize=1024%2C302&#038;ssl=1\" alt=\"\" class=\"wp-image-32949\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/02-asb-resource-group-980x289.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/02-asb-resource-group-480x142.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 un gruppo di risorse e una risorsa di tipo Service Bus selezionando il piano Standard, essenziale per poter creare i topics e sfruttare il modello publish\/subscribe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"348\" data-attachment-id=\"32952\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/03-asb-shared-access-policies\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/03-asb-shared-access-policies.png?fit=1920%2C653&amp;ssl=1\" data-orig-size=\"1920,653\" 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=\"03-asb-shared-access-policies\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/03-asb-shared-access-policies.png?fit=1024%2C348&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/03-asb-shared-access-policies.png?resize=1024%2C348&#038;ssl=1\" alt=\"\" class=\"wp-image-32952\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/03-asb-shared-access-policies-980x333.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/03-asb-shared-access-policies-480x163.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nella sezione delle shared access policies, selezioniamo RootManageSharedAccessKey, clicchiamo e copiamo la Primary Connection String che dovremo passare a MassTransit per accedere e gestire le risorse del bus.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic void ConfigureServices(IServiceCollection services)\n{\n        services.AddRazorPages();\n\n        var bus = Bus.Factory.CreateUsingAzureServiceBus(cfg =&gt; \n        {\n                cfg.Host(Configuration&#x5B;&quot;AzureServiceBus:ConnectionString&quot;]);\n        });\n        services.AddSingleton&lt;IBus&gt;(bus);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La creazione del bus \u00e8 davvero semplice, lo costruiamo utilizzando il metodo CreateUsingAzureServiceBus e specificando la connection string precedentemente copiata.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstatic async Task Main()\n{\n        var emailSender = new FakeEmailSender();\n\n        var bus = Bus.Factory.CreateUsingAzureServiceBus(cfg =&gt;\n        {\n                cfg.Host(Configuration&#x5B;&quot;AzureServiceBus:ConnectionString&quot;]);         \n                cfg.ReceiveEndpoint(Configuration&#x5B;&quot;AzureServiceBus:Queue&quot;], endpoint =&gt;\n                {\n                        endpoint.Consumer(() =&gt; new MeetingCreatedMessageConsumer(emailSender));\n                });\n        });\n        await bus.StartAsync();\n        Console.ReadKey();\n        await bus.StopAsync();\n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La configurazione del bus lato consumer \u00e8 simile ma in aggiunta vanno specificati gli endpoints. Questi ultimi rappresentano l\u2019astrazione di un percorso dal quale i messaggi verranno letti dalla nostra app. Con la definizione di un endpoint, se non esiste gi\u00e0, verr\u00e0 creata una coda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Specificare l&#8217;endpoint non basta: dobbiamo registrare i consumers che verranno richiamati alla ricezione dei messaggi. Quest\u2019ultima operazione creer\u00e0, se non esiste gi\u00e0, un topic che avr\u00e0 lo stesso nome del messaggio che il consumer pu\u00f2 gestire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mandiamo in esecuzione i progetti e vediamo cosa accade sul nostro bus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"166\" data-attachment-id=\"32957\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/04-asb-topic\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/04-asb-topic.png?fit=1920%2C312&amp;ssl=1\" data-orig-size=\"1920,312\" 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=\"04-asb-topic\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/04-asb-topic.png?fit=1024%2C166&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/04-asb-topic.png?resize=1024%2C166&#038;ssl=1\" alt=\"\" class=\"wp-image-32957\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/04-asb-topic-980x159.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/04-asb-topic-480x78.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\">Andando nella sezione Topics, vedremo che MassTransit ha creato un nuovo topic a cui sono associate due subscription, una per ogni coda che deve ricevere una copia del messaggio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"181\" data-attachment-id=\"32963\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/06-asb-subscriptions\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/06-asb-subscriptions.png?fit=1918%2C339&amp;ssl=1\" data-orig-size=\"1918,339\" 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=\"06-asb-subscriptions\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/06-asb-subscriptions.png?fit=1024%2C181&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/06-asb-subscriptions.png?resize=1024%2C181&#038;ssl=1\" alt=\"\" class=\"wp-image-32963\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/06-asb-subscriptions-980x173.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/06-asb-subscriptions-480x85.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\">Andando nella sezione Subscriptions vediamo quali code sono collegate al topic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"200\" data-attachment-id=\"32960\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/05-asb-queues\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/05-asb-queues.png?fit=1919%2C375&amp;ssl=1\" data-orig-size=\"1919,375\" 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=\"05-asb-queues\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/05-asb-queues.png?fit=1024%2C200&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/05-asb-queues.png?resize=1024%2C200&#038;ssl=1\" alt=\"\" class=\"wp-image-32960\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/05-asb-queues-980x192.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/05-asb-queues-480x94.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\">Infine, nella sezione Queues possiamo vedere le nostre code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"905\" height=\"403\" data-attachment-id=\"32965\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/07-asb-queue-metric\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/07-asb-queue-metric.png?fit=905%2C403&amp;ssl=1\" data-orig-size=\"905,403\" 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=\"07-asb-queue-metric\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/07-asb-queue-metric.png?fit=905%2C403&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/07-asb-queue-metric.png?resize=905%2C403&#038;ssl=1\" alt=\"\" class=\"wp-image-32965\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/07-asb-queue-metric.png 905w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/07-asb-queue-metric-480x214.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 905px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Inviamo dei messaggi attraverso la web app, scegliamo una coda qualunque, e vediamo nella sezione delle metriche che il numero di messaggi in entrata e in uscita aumenta. Notate che le metriche non vengono aggiornate in real-time, quindi dovreste attendere qualche minuto prima di poter osservare l\u2019incremento dei messaggi. Per accertarci che i messaggi arrivino, possiamo vedere sulla console dei consumer alcuni messaggi indicanti che la mail e gli SMS sono stati inviati. Questo vuol dire che i nostri consumers hanno ricevuto ed elaborato i messaggi arrivati sulle relative code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trasporto con Amazon SQS\/SNS<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"221\" data-attachment-id=\"32969\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/08-sqs-iam\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/08-sqs-iam.png?fit=1920%2C415&amp;ssl=1\" data-orig-size=\"1920,415\" 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=\"08-sqs-iam\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/08-sqs-iam.png?fit=1024%2C221&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/08-sqs-iam.png?resize=1024%2C221&#038;ssl=1\" alt=\"\" class=\"wp-image-32969\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/08-sqs-iam-980x212.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/08-sqs-iam-480x104.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo passo consiste nel creare un utente nella sezione Identity and Access Management (IAM) e genereare le chiavi di accesso programmatiche.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"310\" data-attachment-id=\"32972\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/09-sqs-iam-authorizations\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/09-sqs-iam-authorizations.png?fit=1918%2C580&amp;ssl=1\" data-orig-size=\"1918,580\" 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=\"09-sqs-iam-authorizations\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/09-sqs-iam-authorizations.png?fit=1024%2C310&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/09-sqs-iam-authorizations.png?resize=1024%2C310&#038;ssl=1\" alt=\"\" class=\"wp-image-32972\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/09-sqs-iam-authorizations-980x296.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/09-sqs-iam-authorizations-480x145.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\">Assegnamogli le autorizzazioni <strong>AmazonSQSFullAccess<\/strong> e <strong>AmazonSNSFullAccess<\/strong> e copiamo le chiavi di accesso.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic void ConfigureServices(IServiceCollection services)\n{\n        services.AddRazorPages();\n\n        var bus = Bus.Factory.CreateUsingAmazonSqs(cfg =&gt;\n        {\n                cfg.Host(Configuration&#x5B;&quot;AmazonSqs:Region&quot;], host =&gt;\n                {\n                        host.AccessKey(Configuration&#x5B;&quot;AmazonSqs:AccessKey&quot;]);            \n                        host.SecretKey(Configuration&#x5B;&quot;AmazonSqs:SecretKey&quot;]);\n                });\n        });\n        services.AddSingleton&lt;IBus&gt;(bus);\n} \n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstatic async Task Main()\n{\n        var emailSender = new FakeEmailSender();\n        \n        var bus = Bus.Factory.CreateUsingAmazonSqs(cfg =&gt;\n        {\n                cfg.Host(Configuration&#x5B;&quot;AmazonSqs:Region&quot;], host =&gt;\n                {\n                        host.AccessKey(Configuration&#x5B;&quot;AmazonSqs:AccessKey&quot;]);            \n                        host.SecretKey(Configuration&#x5B;&quot;AmazonSqs:SecretKey&quot;]);\n                });\n\n                cfg.ReceiveEndpoint(Configuration&#x5B;&quot;AmazonSqs:Queue&quot;], endpoint =&gt;\n                {\n                        endpoint.Consumer(() =&gt; new MeetingCreatedMessageConsumer(emailSender));\n                });\n        });\n        await bus.StartAsync();\n        Console.ReadKey();\n        await bus.StopAsync();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Anche in questo caso la creazione e configurazione del bus \u00e8 davvero molto semplice sia per il publisher che per il consumer. La differenza \u00e8 che usiamo un differente metodo per creare un bus per il trasporto AWS SQS\/SNS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mandiamo ora in esecuzione i progetti.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"456\" data-attachment-id=\"32976\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/10-sqs-topic\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10-sqs-topic.png?fit=1846%2C822&amp;ssl=1\" data-orig-size=\"1846,822\" 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=\"10-sqs-topic\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10-sqs-topic.png?fit=1024%2C456&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10-sqs-topic.png?resize=1024%2C456&#038;ssl=1\" alt=\"\" class=\"wp-image-32976\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/10-sqs-topic-980x436.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/10-sqs-topic-480x214.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 nel caso di ASB, viene creato un topic con una subscription per ogni coda che dovr\u00e0 ricevere una copia del messaggio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"288\" data-attachment-id=\"32979\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/11-sqs-queues\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/11-sqs-queues.png?fit=1877%2C528&amp;ssl=1\" data-orig-size=\"1877,528\" 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=\"11-sqs-queues\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/11-sqs-queues.png?fit=1024%2C288&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/11-sqs-queues.png?resize=1024%2C288&#038;ssl=1\" alt=\"\" class=\"wp-image-32979\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/11-sqs-queues-980x276.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/11-sqs-queues-480x135.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\">Ecco&nbsp;le code:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"441\" data-attachment-id=\"32982\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/12-sqs-queue-monitor\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/12-sqs-queue-monitor.png?fit=1855%2C798&amp;ssl=1\" data-orig-size=\"1855,798\" 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=\"12-sqs-queue-monitor\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/12-sqs-queue-monitor.png?fit=1024%2C441&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/12-sqs-queue-monitor.png?resize=1024%2C441&#038;ssl=1\" alt=\"\" class=\"wp-image-32982\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/12-sqs-queue-monitor-980x422.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/12-sqs-queue-monitor-480x206.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\">Andiamo nel tab Monitoring di una coda qualunque e, inviati alcuni messaggi, potremo vedere come la metrica \u201cNumber Of Messages Received\u201d salga. Come nel caso di ASB, le metriche non sono aggiornate in real-time e bisogna attendere un po\u2019 prima di osservarle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trasporto con RabbitMQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In quest\u2019ultima sezione vedremo come utilizzare RabbitMQ, il pi\u00f9 popolare message broker attualmente in circolazione.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic void ConfigureServices(IServiceCollection services)\n{\n        services.AddRazorPages();\n\n        var bus = Bus.Factory.CreateUsingRabbitMq(cfg =&gt;\n        {\n                cfg.Host(Configuration&#x5B;&quot;RabbitMQ:Host&quot;], host =&gt;\n                {\n                        host.Username(Configuration&#x5B;&quot;RabbitMQ:Username&quot;]);            \n                        host.Password(Configuration&#x5B;&quot;RabbitMQ:Password&quot;]);\n                });\n        });\n        services.AddSingleton&lt;IBus&gt;(bus);\n} \n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstatic async Task Main()\n{\n        var emailSender = new FakeEmailSender();\n\n        var bus = Bus.Factory.CreateUsingRabbitMq(cfg =&gt;\n        {\n                cfg.Host(Configuration&#x5B;&quot;RabbitMQ:Host&quot;], host =&gt;\n                {\n                        host.Username(Configuration&#x5B;&quot;RabbitMQ:Username&quot;]);            \n                        host.Password(Configuration&#x5B;&quot;RabbitMQ:Password&quot;]);\n                });\n\n                cfg.ReceiveEndpoint(Configuration&#x5B;&quot;RabbitMQ:Queue&quot;], endpoint =&gt;\n                {\n                        endpoint.Consumer(() =&gt; new MeetingCreatedMessageConsumer(emailSender));\n                });\n        });\n        await bus.StartAsync();\n        Console.ReadKey();\n        await bus.StopAsync();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Come vedete negli snippets, la configurazione \u00e8 simile a quelle viste in precedenza, La differenza sta nel metodo della factory utilizzato per costruire il bus e nel modo in cui configuriamo l&#8217;host.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mandiamo anche questa volta in esecuzione i tre progetti.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"455\" data-attachment-id=\"32986\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/13-rabbit-exchanges\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/13-rabbit-exchanges.png?fit=1837%2C817&amp;ssl=1\" data-orig-size=\"1837,817\" 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=\"13-rabbit-exchanges\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/13-rabbit-exchanges.png?fit=1024%2C455&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/13-rabbit-exchanges-1024x455.png?resize=1024%2C455&#038;ssl=1\" alt=\"\" class=\"wp-image-32986\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/13-rabbit-exchanges-980x436.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/13-rabbit-exchanges-480x213.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\">Nel tab Exchanges, vedrete che MassTransit creer\u00e0 un exchange che ha il nome del tipo di messaggio da inviare e due exchanges che hanno lo stesso nome della coda a cui sono rispettivamente collegati.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"322\" data-attachment-id=\"32989\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/14-rabbit-queues\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/14-rabbit-queues.png?fit=1845%2C581&amp;ssl=1\" data-orig-size=\"1845,581\" 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=\"14-rabbit-queues\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/14-rabbit-queues.png?fit=1024%2C322&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/14-rabbit-queues.png?resize=1024%2C322&#038;ssl=1\" alt=\"\" class=\"wp-image-32989\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/14-rabbit-queues-980x309.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/14-rabbit-queues-480x151.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\">Ecco&nbsp;le due code.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" data-attachment-id=\"32993\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/attachment\/15-rabbit-queue-message-rates\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/15-rabbit-queue-message-rates.png?fit=1840%2C753&amp;ssl=1\" data-orig-size=\"1840,753\" 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=\"15-rabbit-queue-message-rates\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/15-rabbit-queue-message-rates.png?fit=1024%2C419&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/15-rabbit-queue-message-rates.png?resize=1024%2C419&#038;ssl=1\" alt=\"\" class=\"wp-image-32993\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/15-rabbit-queue-message-rates-980x401.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/05\/15-rabbit-queue-message-rates-480x196.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\">Inviando dei messaggi e cliccando su una coda qualunque, vedremo che la frequenza dei messaggi aumenta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo visto come MassTransit ci dia la possibilit\u00e0 di creare applicazioni che interoperano tra loro attraverso un Service Bus, in maniera agnostica rispetto al trasporto utilizzato, rendendo possibile in maniera trasparente intercambiare le diverse tecnologie di trasporto senza apportare quasi alcuna modifica al codice. Questo \u00e8 solo uno dei tanti vantaggi che MassTransit ci permette di sfruttare, per approfondimenti vi consiglio di andare al <a href=\"https:\/\/masstransit-project.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">sito ufficiale del progetto<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se volete conoscere un\u2019alternativa a MassTransit, vi consiglio di dare un\u2019occhiata a <a href=\"https:\/\/blexin.com\/it\/blog\/risolviamo-il-rebus-della-comunicazione\/\" target=\"_blank\" rel=\"noreferrer noopener\">questo articolo scritto da Genny<\/a> che parla di Rebus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spero che la lettura sia stata di vostro gradimento e che vi possa essere utile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alla prossima!&nbsp;<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Astraiamo il trasporto e creiamo applicazioni a microservizi che interagiscono in maniera asincrona <\/p>\n","protected":false},"author":0,"featured_media":32936,"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":"","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,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","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":[688637541,688637377,688637457,688637536],"class_list":["post-32935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-dotnetcore","tag-azure","tag-rabbitmq","tag-swdesign"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mass Transit: un caso d\u2019uso reale - Blexin<\/title>\n<meta name=\"description\" content=\"Con Mass Transit puoi gestire un&#039;architettura a microservizi che operano fra loro in maniera asincrona: un&#039;esperienza sul campo\" \/>\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\/masstransit-un-caso-duso-reale\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mass Transit: un caso d\u2019uso reale - Blexin\" \/>\n<meta property=\"og:description\" content=\"Con Mass Transit puoi gestire un&#039;architettura a microservizi che operano fra loro in maniera asincrona: un&#039;esperienza sul campo\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-25T16:20:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-28T08:02:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1105\" \/>\n\t<meta property=\"og:image:height\" content=\"656\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Mass Transit: un caso d\u2019uso reale\",\"datePublished\":\"2021-05-25T16:20:00+00:00\",\"dateModified\":\"2021-05-28T08:02:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/\"},\"wordCount\":1443,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1\",\"keywords\":[\".NetCore\",\"Azure\",\"RabbitMQ\",\"softwaredesign\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/\",\"name\":\"Mass Transit: un caso d\u2019uso reale - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1\",\"datePublished\":\"2021-05-25T16:20:00+00:00\",\"dateModified\":\"2021-05-28T08:02:01+00:00\",\"author\":{\"@id\":\"\"},\"description\":\"Con Mass Transit puoi gestire un'architettura a microservizi che operano fra loro in maniera asincrona: un'esperienza sul campo\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1\",\"width\":1105,\"height\":656,\"caption\":\"mass transit\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/masstransit-un-caso-duso-reale\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mass Transit: un caso d\u2019uso reale\"}]},{\"@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\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mass Transit: un caso d\u2019uso reale - Blexin","description":"Con Mass Transit puoi gestire un'architettura a microservizi che operano fra loro in maniera asincrona: un'esperienza sul campo","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\/masstransit-un-caso-duso-reale\/","og_locale":"it_IT","og_type":"article","og_title":"Mass Transit: un caso d\u2019uso reale - Blexin","og_description":"Con Mass Transit puoi gestire un'architettura a microservizi che operano fra loro in maniera asincrona: un'esperienza sul campo","og_url":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/","og_site_name":"Blexin","article_published_time":"2021-05-25T16:20:00+00:00","article_modified_time":"2021-05-28T08:02:01+00:00","og_image":[{"width":1105,"height":656,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"11 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/"},"author":{"name":"","@id":""},"headline":"Mass Transit: un caso d\u2019uso reale","datePublished":"2021-05-25T16:20:00+00:00","dateModified":"2021-05-28T08:02:01+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/"},"wordCount":1443,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","keywords":[".NetCore","Azure","RabbitMQ","softwaredesign"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/","url":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/","name":"Mass Transit: un caso d\u2019uso reale - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","datePublished":"2021-05-25T16:20:00+00:00","dateModified":"2021-05-28T08:02:01+00:00","author":{"@id":""},"description":"Con Mass Transit puoi gestire un'architettura a microservizi che operano fra loro in maniera asincrona: un'esperienza sul campo","breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","width":1105,"height":656,"caption":"mass transit"},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/masstransit-un-caso-duso-reale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Mass Transit: un caso d\u2019uso reale"}]},{"@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"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/05\/10_ITA_1105x656_blog-masstransit.png?fit=1105%2C656&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-8zd","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32935","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"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=32935"}],"version-history":[{"count":36,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32935\/revisions"}],"predecessor-version":[{"id":33028,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32935\/revisions\/33028"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/32936"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=32935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=32935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=32935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}