Esempio: Le regole aziendali indicano che il cliente deve ricevere un messaggio di conferma (e-mail o simile) quando viene effettuato un ordine.CQRS - Quando inviare un messaggio di conferma?
Diciamo che uno NewOrderRegisteredEvent
viene inviato dal dominio ed è raccolto da un listener di eventi che invia il messaggio di conferma. Quando ciò viene fatto, un altro gestore di eventi genera un'eccezione o qualcos'altro va storto e l'unità di lavoro viene ripristinata. Ora abbiamo inviato all'utente un messaggio di conferma per qualcosa che è stato ripristinato.
Qual è il modo "cqrs" per risolvere problemi come questo in cui si vuole fare qualcosa dopo aver commesso un'unità di lavoro? Un altro fattore complicante è la ripetizione degli eventi. Non voglio che i vecchi messaggi di conferma vengano nuovamente inviati ogni volta che rieseguo gli eventi registrati per creare una nuova vista/proiezione.
La mia migliore teoria fino ad ora: ho appena iniziato a esaminare l'affascinante mondo dei cqrs e mi chiedevo se questo sarebbe stato implementato come una saga? Se una saga è come una macchina a stati in cui ogni transizione può avvenire solo una volta, immagino che risolverebbe questo problema? Ho solo un momento difficile visualizzare come questo si adatta insieme con gli eventi del bus di comando e dominio ..
Compilare all'attività "invia e-mail" un messaggio. Se il rotolo torna indietro, lo stesso vale per l'invio del messaggio (per una conservazione duratura). Qualcos'altro preleva il messaggio e fa l'e-mail. A proposito, non correlati. Semplice senso del calcolo distribuito. –
Come per la replica dell'evento, MAI induce questo tipo di comportamento. Se il tuo impl. sì, lo stai facendo male. –
Questo ha senso, ma mi interessa questo in un contesto cqrs. Cos'è un "messaggio"? E chi/cosa lo prenderebbe a, e quando? Sarebbe bello sfruttare l'event store per evitare l'introduzione di un altro meccanismo di archiviazione per tenere traccia delle comunicazioni in uscita. – Kimble