关于回滚的领域事件

Domain Events with regards to Rollbak

使用 Domain Driven DesignMongodb 以及外部服务。假设我们有两个服务 Service A (for aggregate A)Service B for aggregate B。每当创建 Aggregate A 时,也会创建相应的 Aggregate B。这样做 synchronously via an API call 以确保实时操作。如果Aggregate B的创建失败,需要回滚Aggregate A的创建。

一旦 Aggregate A 存储在数据库中(通过 ORM 处理),就会触发领域事件 Aggregate_A_Created。在创建 Aggregate B 之前。

我面临的问题很简单,如果创建了 Aggregate A,事件就会被触发,但是如果 Aggregate B 创建失败,Aggregate A 就会从数据库中删除,但是领域事件被触发,这意味着 Aggregate_A_Created。这可能会导致系统进入无效状态,其他服务认为 Aggregate A 存在但实际上它失败了。

我可以触发另一个事件 Aggregate_A_deleted 但是如果服务在 Created 事件之前收到 Deleted 事件怎么办?

我被困在这里,一些见解会很棒。我可以更改 Spring 实现以仅在两个操作都成功时才触发域事件吗?我读到 Spring Mongodb 不支持事务调用

如果聚合 A 和聚合 B 不能分开,它们不应该是公共聚合根的一部分吗?

如果它们真的是分开的,B 应该监听正在创建的 A,并且只在 B 创建成功时才确认该事件。这样-前提是您有 持续事件 - 即使系统在创建 A 并恢复到该状态后出现故障,也会创建 B。

关于事务:由于mongodb 本身可以处理事务,所以不要让您的库选择限制您。如果spring不行,直接用驱动