2012-10-01 37 views
9

Según http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young, el componente responsable de publicar eventos utilizando un editor de eventos es el repositorio.¿Por qué el repositorio CQRS publica eventos, no la tienda de eventos?

Mi pregunta simplemente es: ¿Por qué es eso?

En esta entrada del blog se nos dice que:

El dominio repositorio es responsable de la publicación de los eventos, esto normalmente estaría dentro de una única transacción, junto con el almacenamiento de los eventos en el almacén de eventos.

Hubiera esperado esto como una tarea de la tienda de eventos: una vez que un evento (o eventos múltiples) ha sido almacenado, se publica.

Entonces, ¿por qué está en el repositorio?

Respuesta

9

Su modelo de dominio no tiene conocimiento del mecanismo de almacenamiento. Por otro lado, debe asegurarse de que se publiquen los eventos apropiados, sin importar si usa un almacén de eventos, un almacén SQL clásico o cualquier otro medio de persistencia.

Si se basa en el almacén de eventos para publicar los eventos que tendríamos un acoplamiento ajustado al mecanismo de almacenamiento.

+0

Debido a que el almacenamiento del evento y la publicación de ese evento debe ser operación atómica evitando al mismo tiempo 2PC, y como usted ha mencionado, la publicación de esos eventos no deben No es responsabilidad del almacén de eventos subyacente, es la solución para usar una tabla DB para almacenar el evento mientras se establece un marcador "no publicado". ¿Ha leído otro proceso los eventos marcados como "no publicados" de esa tabla y luego los publica, después de lo cual se establece el marcador y se confirma la transacción? Si este es el caso, ¿está sondeando esa tabla para eventos no publicados la manera de lograr esto? – CraigM

2

almacenar y publicar el evento debe una instrucción atómica porque si una de las dos acciones falla, los oyentes de este evento estará fuera de sincronía con el productor del evento.

Hay una otra solución (más caro), en comparación con la publicación de caso de la tienda de evento, que es el uso de transacciones 2pc (-dos fases se comprometen).

se puede encontrar información más intereting aquí: https://cqrs.wordpress.com/documents/building-event-storage/

Cuestiones relacionadas