据我了解,在事件源中记录事件。但是,这也意味着状态首先发生改变,然后我们记录该事件。例如,假设:
Created User
事件。即事件
采购。Created User
事件传播到订阅者在上述情况下,我们如何处理步骤(2)成功但由于网络故障,数据库脱机等导致步骤(3)失败的情况?由于创建了一个新用户,但从未记录过该事件,因此整个系统将处于不确定状态。我们如何减轻这些类型的故障?还是我上面列出的步骤不是进行事件采购的方式?
谢谢!
答案 0 :(得分:3)
这不是在事件源中发生的事情,甚至在普通CQRS中也没有。
在事件源中,在验证命令之后,域事件由源(DDD中的Aggregate)生成,然后在第一步中将它们附加到事件存储中。之后,订户(读取模型,投影,Sagas,外部系统)将接收并处理新的领域事件。
在CQRS中,域事件生成后,将它们应用于汇总和,然后汇总状态和新事件在同一本地事务中持久保存 ,作为第一步。只有在此之后,订阅者才能收到事件。
所以你看到了吗?您的情况不会发生:第2步和第3步原子地保留,它们成功或失败。