10

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

如果我需要添加新的读取模型(即新的报告视图),我可以再次执行相同的操作 - 我将重播我的事件。

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

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

4

1 回答 1

7

事件处理程序失败的原因是什么?“永恒”有多长?

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

但是,如果读取模型由于某种原因损坏,那么最简单的方法是重置它并通过流式传输事件。即使是数百万个事件也需要相当短的时间。另外,您始终可以使用 Map-Reduce 方法。

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

于 2010-11-23T13:59:10.687 回答