event-sourcing - 事件溯源 - 未创建事件时的错误处理
问题描述
据我了解,在事件溯源中,事件被记录下来。但是,这也意味着首先发生状态更改,然后我们记录该事件。例如,假设:
- 客户端向服务器发送命令以“创建用户”。
- 服务器验证命令并创建用户,即将新用户存储在数据库中。
- 然后服务器记录/存储一个
Created User
事件。即事件溯源。 Created User
事件被传播给订阅者
在上面的场景中,我们如何处理步骤(2)成功但步骤(3)由于网络故障、数据库离线等而失败的场景?现在整个系统将处于不确定状态,因为创建了一个新用户但该事件从未被记录。我们如何减轻这些类型的故障?还是我上面列出的步骤不是进行事件溯源的方法?
谢谢!
解决方案
这不是在事件溯源中发生的事情,甚至在普通的 CQRS 中也不会发生。
在事件溯源中,在验证命令后,域事件由源(DDD 中的聚合)生成,然后在第一步中将它们附加到事件存储中。之后,订阅者(读取模型、投影、Sagas、外部系统)接收并处理新的领域事件。
在 CQRS 中,域事件生成后,它们被应用于聚合,然后聚合的状态和新事件被持久化在同一个本地事务中,作为第一步。只有在那之后,订阅者才会收到事件。
所以你看?您的情况不会发生:步骤 2 和 3 以原子方式持续存在,它们一起成功或失败。
推荐阅读
- python - 卷曲得到响应 403
- dart - 为什么我不能立即取消 `StreamGroup` 订阅
- python - python模块安装期间的语法错误
- assembly - 在 att 语法中定义常量
- sql-server - 存储过程只返回表 1 的数据,而不是 10 个表
- c# - XML 列输出
- amazon-web-services - AWS ECS 从正在运行的容器中生成一个 Docker 容器
- docker - docker 使用不同顺序的命令运行行为
- python - 如何从列表中随机选择同时排除先前的随机选择?
- powershell - 如何使用 .bat 脚本从非静态链接下载文件