【问题标题】:Domain Driven Design - Atomic transaction across multiple bounded context领域驱动设计 - 跨多个有界上下文的原子事务
【发布时间】:2015-05-02 05:40:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      当您使用事件在上下文之间进行通信时,只需发布​​ Product_NotSold 并在收到此事件时回滚事务。

      但是,您不能以这种方式提供“原子”事务。它更像是一个长期运行的过程(又名传奇)。如果你真的想要原子性,你需要使用两阶段提交和放弃事件。

      【讨论】:

      • 非常感谢您的建议
      猜你喜欢
      • 2015-01-06
      • 2018-01-18
      • 2021-01-29
      • 2016-09-26
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多