当聚合的快照与事件日志不同步时,我可以简单地从早期快照(应该是同步的)重放我的事件。当我添加/删除新字段或修改现有处理程序的逻辑时,我可以这样做。
如果我需要添加新的阅读模型(即新的报告视图),我可以再次这样做 - 我将重播我的活动。
但是当读取的模型与事件日志不同步时,我应该如何处理这种情况?事件和发布的存储在一个事务中,但读取模型的更新发生在另一个事务中,这可能会失败。从一开始就重复事件可能有所帮助,但它可能需要永恒。我是否需要整个读取模型的快照概念?
你如何解决这个问题? 谢谢。
答案 0 :(得分:7)
事件处理程序失败的原因是什么? “永恒”多久了?
读取模型更新很少失败(与命令处理程序不同),因为内部逻辑非常简单。故障可能是由瞬态问题(IO /网络中断)引起的,并且将由消息总线自动处理。
但是,如果读取模型由于某种原因而损坏,那么最简单的方法是重置它并通过流式传输事件。即使是数百万个事件也会花费相当少的时间。另外,您始终可以使用Map-Reduce方法。
我建议不要在阅读模型时引入快照。我认为这只会使架构复杂化而没有任何显着的收益。