根据CQRS à la Greg Young的说法,事件处理程序(和下游事件反规范化器)会对事件发布者之前发布的传入事件做出反应。
现在让我们假设在运行时我们想要添加一个新的事件反规范化器:基本上,这很容易,但它需要将其数据获取到当前状态。
做这个的最好方式是什么?
我应该向事件存储发送一个乱序请求并询问所有以前发出的事件吗?
还是有更好的方法来做到这一点?
根据CQRS à la Greg Young的说法,事件处理程序(和下游事件反规范化器)会对事件发布者之前发布的传入事件做出反应。
现在让我们假设在运行时我们想要添加一个新的事件反规范化器:基本上,这很容易,但它需要将其数据获取到当前状态。
做这个的最好方式是什么?
我应该向事件存储发送一个乱序请求并询问所有以前发出的事件吗?
还是有更好的方法来做到这一点?
您可以针对新处理程序获取和重播所有(必需的)事件。这可以在一个单独的过程中完成,因为您本质上想要的是将持久化的视图模型置于正确的状态。
查看 Rinat Abdullin 的Lokad.CQRS示例项目以获取生产示例。特别是它SaaS.Engine.StartupProjectionRebuilder
可能是一个有趣的来源,即使它相当复杂。
人们还可以构建预测,以便他们记住上次看到的事件。然后在任何启动时,他们都会要求此事件并全部转发。重新开始一个旧的投影并建立一个新的投影就变成了大致相同的事情。
如果您采用有界上下文复杂集成,您可能需要删除整个读取模型并重新构建它。