首页 > 解决方案 > 事件溯源 - 未创建事件时的错误处理

问题描述

据我了解,在事件溯源中,事件被记录下来。但是,这也意味着首先发生状态更改,然后我们记录该事件。例如,假设:

  1. 客户端向服务器发送命令以“创建用户”。
  2. 服务器验证命令并创建用户,即将新用户存储在数据库中。
  3. 然后服务器记录/存储一个Created User事件。即事件溯源。
  4. Created User事件被传播给订阅者

在上面的场景中,我们如何处理步骤(2)成功但步骤(3)由于网络故障、数据库离线等而失败的场景?现在整个系统将处于不确定状态,因为创建了一个新用户但该事件从未被记录。我们如何减轻这些类型的故障?还是我上面列出的步骤不是进行事件溯源的方法?

谢谢!

标签: event-sourcing

解决方案


这不是在事件溯源中发生的事情,甚至在普通的 CQRS 中也不会发生。

在事件溯源中,在验证命令后,域事件由源(DDD 中的聚合)生成,然后在第一步中将它们附加到事件存储中。之后,订阅者(读取模型、投影、Sagas、外部系统)接收并处理新的领域事件。

在 CQRS 中,域事件生成后,它们被应用于聚合然后聚合的状态和新事件被持久化在同一个本地事务中,作为第一步。只有在那之后,订阅者才会收到事件。

所以你看?您的情况不会发生:步骤 2 和 3 以原子方式持续存在,它们一起成功或失败。


推荐阅读