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”.

 

image_2_thumb61

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:

  1. Invio del comando in POST;
  2. Ricezione del comando e dispatch dello stesso su una coda;
  3. Invio della risposta HTTP-202;
  4. Ricezione del comando e gestione dello stesso da parte del back-end;
  5. Broadcast dell’evento;
  6. De-normalizzazione;

Facciamo un passo indietro e semplifichiamo il processo riducendolo all’essenziale:

  1. Un processo (A) invia un messaggio ad un processo (B);
  2. Il processo (B) riceve la richiesta, fa quello che deve fare e pubblica un evento che notifica il suo nuovo stato;
  3. 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