In un contesto di microservizi CQRS / async, ho un gestore di comandi, ad es. SendOrderConfirmationEmailCommandHandler implementato in un servizio di comunicazione.
Dipende dalle informazioni del servizio ordini, che possono essere recuperate tramite GetOrderDetailsQueryHandler.
La sequenza di messaggi per questo processo è:
SendOrderConfirmationEmailCommand - > GetOrderDetailsQuery - > OrderDetailsRetrievedEvent
Poiché tutti i messaggi (inclusa GetOrderDetailsQuery) sono asincroni per necessità, il processo di esecuzione di SendOrderEmailCommandHandler viene chiuso dopo aver inviato un oggetto GetOrderDetailsQuery e quindi in qualche modo deve riprendere da dove era stato interrotto dopo la gestione di OrderDetailsRetrievedEvent.
Quale tipo di schema può essere implementato per risolvere il gap tra l'attivazione di una query e il messaggio di risposta ricevuto in modo tale da essere in grado di conservare e ricollegare all'istanza del messaggio di comando originale per il quale sono stati recuperati i dettagli dell'ordine ?
Può o dovrebbe essere gestito in CommandHandler o altrove?