如何在事件源中处理备份和还原点?

时间:2019-01-18 07:50:50

标签: domain-driven-design event-sourcing

我们的工具

在我们的团队中,我们正在研究一种使用事件源的工具。事件用于构建(运行时)和重建(启动)系统中聚合的状态。不同的微服务(视图库,存储库...)利用事件流来构建其状态。

问题

我正在解决一个问题,用户可以选择为这些聚合之一创建备份点。稍后,用户可以选择返回到这一点。

建议的解决方案

我的想法是创建两个事件:

  • BackupCreatedEvent
  • BackupRestoredEvent

BackupCreatedEvent将包含聚合的标识符,时间戳和备份标识符。触发还原时,聚合的状态将被丢弃。接下来,将对事件存储中仅适用于该聚合的所有事件进行重播。只要命中具有匹配的聚集标识符和备份标识符的BackupCreatedEvent,重放就会停止。这应该使聚合返回所需的状态。

每当您重新启动应用程序并且必须重建所有聚合时,我打算执行以下操作。如果在事件重播期间我击中BackupCreatedEvent以获得总计X,它将忽略应用于X的任何后续事件,直到我击中匹配的BackupRestoredEvent

问题和考虑因素

当我了解事件来源时,是不允许您更改事件存储中的任何事件的。例如,您不应将其标记为在重放时被忽略或被跳过。您也不应将其从事件存储中删除。

我们已经考虑过使用快照,但是我们有许多服务(例如,视图存储)只能增量地应用事件,而不能加载聚合快照。我们将不得不建立这种能力。

我的问题主要是:可以在重播时忽略事件吗?

0 个答案:

没有答案