Disaccoppiare con un’infrastruttura Enterprise Service Bus

Un Enterprise Service Bus (ESB) è un’infrastruttura software che fornisce servizi di supporto ad architetture SOA complesse. <>

Mi sto rendendo conto di come con il passare del tempo, sempre di più, si cerchi di mimare la realtà dei fatti con gli strumenti di programmazione cercando lo strumento perfetto per i nostri scopi.
In particolare, a farmene rendere conto è stato proprio ESB, vi illustro subito i concetti cardine di questa infrastruttura ed in particolare dell’implementazione nel mondo .NET, ovvero NServiceBus.
Tutto si basa sostanzialmente su workflow, ovvero, mimare i processi interni per esempio di un’azienda disegnando un workflow dove ci sono attori, spettatori e messaggi.
NServiceBus offre un gran valore aggiunto rispetto alla concorrenza, ovvero mette a disposizione dello sviluppatore un nuovo tipo di progetto che permette, tramite un editor completamente grafico, di disegnare un workflow (nel suo gergo una saga) e da questa generare automaticamente l’insieme di progetti e classi preconfigurate per essere operative premendo F5.

Cos’è MSMQ?

MSMQ è l’implementazione di Microsoft del “concetto di coda di messaggi”.
MSMQ è disponibile da molti anni e nella pratica ci consente di creare un coda (Queue) nominata come vogliamo e popolarla con dei messaggi, che verranno processati secondo l’ordine di arrivo.
Esistono anche altre implementazioni del concetto di Message Queue, per esempio RabbitMQ.

Tornando ad NServiceBus possiamo dire che l’infrastruttura si basa su implementazione di comandi, eventi e messaggi, MSMQ è soltanto la tecnologia che trasporta i messaggi, poco importa.
Il vero punto di forza di un’architettura SOA è il disaccoppiamento, nessuno conosce nessuno e tutti collaboriamo insieme in questo caso, anche su server diversi se necessario.
L’idea è quella di un sistema paragonabile alle email, tizio invia una mail a caio, quando Caio legge la mail di Tizio fà qualcosa e avvisa Sempronio, che a sua volta può fare qualcos’altro.
La logica di business in questo caso è implementata all’interno di ogni singolo Endpoint del workflow attraverso l’implementazione delle rispettive interfacce.
NServiceBus in questa architettura si preoccuperà di raccogliere eventi e comandi, inizializzare le code, di fare il routing dei messaggi (se necessario anche tra server diversi), di persistere le saghe su database (con NHibernate per db relazionali), di garantire un certo numero di tentativi di invio del messaggio ecc…

Conclusioni

Alla fine della brevissima panoramica, il codice da scrivere risulta essere davvero poco anche se la curva di apprendimento iniziale è molto bassa. Ne vale la pena se nel software che dovete realizzare non avete requisiti di performance e volete creare un domain model che sia estendibile, disaccoppiabile, personalizzabile e che debba interagire con altri software.

Sito di NServiceBus

Rispondi

Leggi articolo precedente:
DDD + noSQL = true story

C'è molto fermento nel mondo DDD per quanto riguarda l'adozione di database documentali al posto di database relazionali + ORM.

Chiudi