Golo Roden
Golo Roden

Reputation: 150842

How do I introduce a new event denormalizer in a CQRS system?

According to CQRS à la Greg Young, event handlers (and the downstream event denormalizers) react on incoming events that were published before by the event publisher.

Now lets suppose that at runtime we want to add a new event denormalizer: Basically, this is easy, but it needs to get to its data to the current state.

What is the best way to do this?

Should I send an out-of-order request to the event store and ask for all previously emitted events?

Or is there a better way to do this?

Upvotes: 3

Views: 1434

Answers (3)

Narvalex
Narvalex

Reputation: 1898

If you embrace bounded context complex integration you may need to drop the entire read model and rebuild it.

Upvotes: 2

Sebastian Good
Sebastian Good

Reputation: 6360

One can also build the projections so that they remember what event they saw last. Then on any startup, they ask for this event and all forward. Re-starting an old projection and building a new one then become roughly the same thing.

Upvotes: 4

Dennis Traub
Dennis Traub

Reputation: 51654

You can fetch and replay all (required) events against the new handler. This can be done in a separate process since what you essentially want is to get the persisted view models into the proper state.

Have a look at Rinat Abdullin's Lokad.CQRS sample project for a production example. Especially the SaaS.Engine.StartupProjectionRebuilder might be an interesting source even though it's rather complex.

Upvotes: 4

Related Questions