如何在 CQRS 系统中引入新的事件反规范化程序



根据 CQRS à la Greg Young 的说法,事件处理程序(和下游事件反规范化程序)对事件发布者之前发布的传入事件做出反应。

现在让我们假设在运行时我们要添加新的事件反规范化程序: 基本上,这很容易,但它需要将数据恢复到当前状态。

最好的方法是什么?

我是否应该向事件存储发送无序请求并请求所有以前发出的事件?

或者有更好的方法可以做到这一点吗?

您可以针对新处理程序获取和重播所有(必需的)事件。这可以在单独的过程中完成,因为您本质上想要的是使持久化视图模型进入正确的状态。

查看 Rinat Abdullin 的 Lokad.CQRS 示例项目以获取生产示例。特别是SaaS.Engine.StartupProjectionRebuilder可能是一个有趣的来源,即使它相当复杂。

人们还可以构建投影,以便他们记住他们上次看到的事件。然后在任何初创公司,他们都要求此事件并全部转发。然后,重新启动旧投影和构建新投影变得大致相同。

如果采用有界上下文复杂集成,则可能需要删除整个读取模型并重新生成它。

最新更新