NServiceBus Modeling

NServiceBus Modeling è un’estensione che ci consente, attraverso un editor completamente grafico, di modellare i nostri workflow (o saghe).

Grazie a questo strumento potremo generare automaticamente tutti i progetti e le classi necessarie a far girare un’infrastruttura completamente basata su messaggi, vediamo come:

NServiceBus Modeling è disponibile attraverso l’interfaccia di gestione delle estensioni di Visual Studio, possiamo installarla direttamente da li:
nsbmodeling
Una volta installata possiamo procedere alla creazione di un nuovo progetto di tipo NServiceBus Application:
nsbmodelingproj
Ora il risultato è più o meno questo, un progetto con un solo file EndpointDesign.endpoints con all’interno (in formato XML) il “disegno” del workflow che andremo a creare.
nsbmodelingeditor
Ora, come possiamo notare, nella “Casella degli strumenti” abbiamo diversi oggetti da poter inserire all’interno del nostro workflow:

  • Command
  • Emit
  • Event
  • Process
  • Send-only endpoint
  • Send/receive endpoint

Possiamo riassumere il concetto in questo modo, qualcuno (send-only endpoint) invia (emit) un comando (Command) a qualcun’altro (Send/receive endpoint) che lo processa (process) ed emette (emit) un evento (event) per notificarne l’avvenuta elaborazione.

Il concetto è molto astratto e difficile da interpretare, procedo con un esempio pratico:
nsbmodelingsaga
In questo esempio abbiamo un endpoint di tipo send-only che può solo inviare messaggi di nome Ecommerce e che emetterà (freccia continua) un comando CreateNewOrder e che verrà notificato all’endpoint OrderService (la freccia tratteggiata indica Process) il quale, dopo aver fatto le opportune elaborazioni, emetterà (freccia continua) un nuovo evento NewOrderCreated.

NB: si consiglia sempre l’adozione di un certo tipo di nomenclatura quando vengono creati i workflow, i comandi in particolare hanno una nomenclatura imperativa, CreaNuovoOrdine, CancellaOrdinePendente ecc… per gli eventi invece di solito si parla al passato, ovvero qualcosa è avvenuto, NewOrderCreated, OrderCanceled ecc…
Per i send/receive endpoint di solito è buona convenzione aggiungere al nome il suffisso Service, OrderService in questo caso.

Una volta che abbiamo definito chi emette e chi processa nel nostro workflow, NServiceBus ci da GRATIS il modo di generare automaticamente l’intero scheletro del nostro software, semplicemente facendo, tasto destro, Generate, nel nostro workflow.
nsbmodelinggen
A questo punto avremo un insieme di progetti che, seppure non facciano assolutamente nulla, sono già pronti a funzionare premendo F5 e compilando la soluzione.

NB: per interfacciarsi con MSMQ, è necessario avere MSMQ installato e girare come Administrator.

Cosa è stato creato?

In questo caso sono stati creati 4 progetti, di tipo “Class Library”, gli endpoint Ecommerce ed OrderService sono entrambi progetti di avvio pur essendo class library, perchè sono hostati in un .exe fatto in TopShelf.
nsbmodelinghost
Abbiamo quindi due progetti di avvio hostati e altri 2 progetti che rappresentano i messaggi scambiati tra i vari endpoint:
Nel progetto NSBModeling.OrderService.Contracts troveremo i messaggi relativi ai Event
Nel progetto NSBModeling.OrderService.InternalMessages troveremo quelli relativi ai Command

Rispondi

Leggi articolo precedente:
RDBMS in contesti DDD

Se siete dei DBA vi consiglio caldamente di ignorare questo post o di leggerlo ben ancorati ad una sedia, magari...

Chiudi