3

我们有一个账户 A 和一个账户 B。我们想在 A 和 B 之间转移资金/资金。假设我们有一个账户的聚合根。根据 Eric Evan 的书,我们需要一个域服务来处理传输逻辑。为了立即保持一致性,我们需要在单个事务中修改账户 A 和账户 B。是否可以使用 EventStore 在单个事务中写入两个不同的流(账户 A 和账户 B)?

4

1 回答 1

3

是否可以使用 EventStore 在单个事务中写入两个不同的流(帐户 A 和帐户 B)?

从 V5 RC1(2018 年 12 月)开始,我找不到任何证据表明 Event Store 支持对多个事件流的协调写入。

假设您的数据模型是正确的,并且两个帐户确实属于不同的流:这意味着您没有要管理的硬事务边界,而是一个流程。

打个比方:考虑一次银行转账——你认为我们会在一次交易中将钱从美国银行的账户转移到富国银行的账户吗?

更常用的方法是在自己的流中管理传输过程,它会跟踪发生的所有事情。帐户的更改仍然发生在它们自己的流中,彼此隔离。流程流负责编排——验证来自其他元素的确认。

流程的快乐路径可能看起来像:

  1. 在流程流中记录传输请求
  2. 记录账户A流中的资金提取
  3. 在流程流中记录对资金提取的确认
  4. 记录B账户流中的资金存入
  5. 在流程流中记录资金存入 的确认
    • 在流程流中记录完成的流程

但是如果你真的需要同时修改这两个账户那么你需要它们由相同的粗粒度锁管理。由于事件存储仅保证在流级别锁定,因此您需要重新评估您的数据模型。

于 2019-03-03T15:18:16.807 回答