关于回滚的领域事件
Domain Events with regards to Rollbak
使用 Domain Driven Design
和 Mongodb
以及外部服务。假设我们有两个服务 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不行,直接用驱动
使用 Domain Driven Design
和 Mongodb
以及外部服务。假设我们有两个服务 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不行,直接用驱动