领域驱动设计 - 跨多个有界上下文的原子事务

Tyl*_*hao 3 domain-driven-design

在 DDD 中,我明白事件可以在它们彼此通信时解耦有界上下文。假设一个原子事务在分离的有界上下文 A 和 B 上包含两个数据库操作。当 A 上的操作完成时,它发送和由 B 处理的事件完成第二个操作。但是,如果对 B 的操作失败,对 A 的操作如何回滚?

例如,我目前正在使用领域驱动设计设计一个系统。它包含一个 Membership 和一个 Inventory 有界上下文。为了解耦上下文,我使用了事件:当支付订单时,库存上下文将减少已售产品的数量,并发送 Product_Sold 事件。该事件然后由 Membership 上下文处理,然后根据所售产品的价格减去用户的余额。

但是,如果由于数据库故障导致用户余额更新失败,Inventory 上下文如何知道它以便它可以回滚之前减少的产品数量?