在我们的团队中,我们正在研究一种使用事件源的工具。事件用于构建(运行时)和重建(启动)系统中聚合的状态。不同的微服务(视图库,存储库...)利用事件流来构建其状态。
我正在解决一个问题,用户可以选择为这些聚合之一创建备份点。稍后,用户可以选择返回到这一点。
我的想法是创建两个事件:
BackupCreatedEvent
BackupRestoredEvent
BackupCreatedEvent
将包含聚合的标识符,时间戳和备份标识符。触发还原时,聚合的状态将被丢弃。接下来,将对事件存储中仅适用于该聚合的所有事件进行重播。只要命中具有匹配的聚集标识符和备份标识符的BackupCreatedEvent
,重放就会停止。这应该使聚合返回所需的状态。
每当您重新启动应用程序并且必须重建所有聚合时,我打算执行以下操作。如果在事件重播期间我击中BackupCreatedEvent
以获得总计X
,它将忽略应用于X
的任何后续事件,直到我击中匹配的BackupRestoredEvent
。
当我了解事件来源时,是不允许您更改事件存储中的任何事件的。例如,您不应将其标记为在重放时被忽略或被跳过。您也不应将其从事件存储中删除。
我们已经考虑过使用快照,但是我们有许多服务(例如,视图存储)只能增量地应用事件,而不能加载聚合快照。我们将不得不建立这种能力。
我的问题主要是:可以在重播时忽略事件吗?