事件源-未创建事件时的错误处理

时间:2018-08-21 14:56:12

标签: event-sourcing

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

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

在上述情况下,我们如何处理步骤(2)成功但由于网络故障,数据库脱机等导致步骤(3)失败的情况?由于创建了一个新用户,但从未记录过该事件,因此整个系统将处于不确定状态。我们如何减轻这些类型的故障?还是我上面列出的步骤不是进行事件采购的方式?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

在CQRS中,域事件生成后,将它们应用于汇总,然后汇总状态和新事件在同一本地事务中持久保存 ,作为第一步。只有在此之后,订阅者才能收到事件。

所以你看到了吗?您的情况不会发生:第2步和第3步原子地保留,它们成功或失败。