当读取模型与事件日志不同步时,如何处理情况?

Dmi*_*ich 9 cqrs event-sourcing

当聚合的快照与事件日志不同步时,我可以简单地从早期快照(应该是同步的)重放我的事件.当我添加/删除新字段或修改现有处理程序的逻辑时,我可以这样做.

如果我需要添加新的阅读模型(即新的报告视图),我可以再次做同样的事情 - 我将重播我的活动.

但是,当读取的模型与事件日志不同步时,我应该如何处理这种情况?事件和发布的存储在一个事务中,但读取模型的更新发生在另一个事务中,这可能会失败.从一开始就重复事件可能有所帮助,但它可能需要永恒.我是否需要整个读取模型的快照概念?

你怎么解决这个问题?谢谢.

Rin*_*lin 7

事件处理程序失败的原因是什么?"永恒"多久了?

读取模型更新很少失败(与命令处理程序不同),因为内部逻辑非常简单.故障可能是由瞬态问题(IO /网络中断)引起的,并且将由消息总线自动处理.

但是,如果读取模型由于某种原因而损坏,则最简单的方法是重置它并通过流式传输事件.即使是数百万个事件也会花费相当少的时间.此外,您始终可以使用Map-Reduce方法.

我建议不要引入快照来读取模型.我认为这只会使架构复杂化而没有任何重大收益.