La serie di post su CQRS si arricchisce sempre più, ne mancano un paio per chiudere il cerchio e avere una overview abbastanza completa su “cosa”, “come” e “quando”.
L’ultima volta che ne abbiamo parlato abbiamo introdotto il concetto di de-normalizzazione asincrona, elencando più o meno una lista di possibili passi simile a quella che segue:
- Invio del comando in POST;
- Ricezione del comando e dispatch dello stesso su una coda;
- Invio della risposta HTTP-202;
- Ricezione del comando e gestione dello stesso da parte del back-end;
- Broadcast dell’evento;
- De-normalizzazione;
Facciamo un passo indietro e semplifichiamo il processo riducendolo all’essenziale:
- Un processo (A) invia un messaggio ad un processo (B);
- Il processo (B) riceve la richiesta, fa quello che deve fare e pubblica un evento che notifica il suo nuovo stato;
- Il processo (A) deve reagire alla notifica/evento;
Ho volutamente utilizzato i termini processo e messaggio per sottolineare che la comunicazione è asincrona.
Ora, il processo (B) riceve svariate richieste e ovviamente pubblica svariate notifiche, eventi, (A) ha quindi bisogno di un modo per capire, tra tutti gli eventi che riceve, quali sono di suo interesse e quali no, quindi quali sono quelli relative a richieste che ha fatto lui e quali sono di altri.
Questo processo si chiama correlazione o gestione della conversazione, gli aspetti fondamentali sono:
- colui che origina il primo messaggio deve avere la possibilità di generare un “Conversation ID” a suo piacimento, ovviamente responsabilità sua che sia unique oppure affidarsi a una parte dell’infrastruttura perché lo faccia per lui;
- l’infrastruttura deve offrire un sistema per trasportare il “Conversation ID” da un endpoint all’altro;
- l’infrastruttura deve garantire che il “Conversation ID” sia propagato a qualsiasi messaggio venga generato da un endpoint in maniera trasparente;
Date queste 3 semplici regole la complessità e/o ramificazione del processo diventa del tutto irrilevante.
Se volete approfondire questi temi venite a trovarci, ne discuteremo intensamente per una giornata intera, con tanto di esempi dal mondo reale.
.m