Ejemplo: Las reglas comerciales establecen que el cliente debe recibir un mensaje de confirmación (correo electrónico o similar) cuando se realiza un pedido.CQRS: ¿cuándo enviar un mensaje de confirmación?
Digamos que un NewOrderRegisteredEvent
se envía desde el dominio y es recogido por un oyente de eventos que envía el mensaje de confirmación. Cuando se hace eso, otro manejador de eventos lanza una excepción o algo más sale mal y la unidad de trabajo se revierte. Ahora hemos enviado al usuario un mensaje de confirmación de algo que se ha retrotraído.
¿Cuál es la forma "cqrs" de resolver problemas como este en los que desea hacer algo una vez que se ha comprometido una unidad de trabajo? Otro factor que complica es la repetición de eventos. No quiero que los mensajes de confirmación antiguos se vuelvan a enviar cada vez que reproduzco los eventos grabados para construir una nueva vista/proyección.
Mi mejor teoría hasta el momento: acabo de comenzar a investigar el fascinante mundo de las cqrs y me preguntaba si esto es algo que se implementaría como una saga. Si una saga es como una máquina de estados donde cada transición solo puede tener lugar una sola vez, entonces supongo que eso resolvería este problema. Sólo tengo un tiempo difícil visualizar cómo va a encajar con los eventos en el bus de mando y dominio ..
Haga que la tarea "enviar correo electrónico" sea un mensaje. Si el flujo retrocede, también lo hace el envío del mensaje (al almacenamiento duradero). Algo más capta el mensaje y lo hace por correo electrónico. Por cierto, no relacionados con cqrs. Llanura distribuida informática sentido común. –
En cuanto a la repetición de eventos, NUNCA induce este tipo de comportamiento. Si tu impl. lo hace, lo estás haciendo mal. –
Eso tiene sentido, pero estoy interesado en esto en un contexto cqrs. ¿Qué es un "mensaje"? ¿Y a quién/qué lo captaría y cuándo? Sería bueno aprovecharse de la tienda de eventos para evitar la introducción de otro mecanismo de almacenamiento para realizar un seguimiento de la comunicación saliente. – Kimble