0

我有一个关于 COR 模式的交易问题:

       AbstractChainHandler
      |                   |
      |                   |
   FirstChainHandler     SecondChainHandler
    -create A               -create B
    -delete A               -delete B

FirstChainHandler 和 SecondChainHandler 都扩展了 AbstractChainHandler 并且它们执行一些持久性任务。是否可以处理事务,所以如果 SecondChainHandler 无法将 B 保存在 db 上,那么 FirstChainHandler 是否会回滚 A 持久性?

我正在尝试使用 spring @Transactional,但它不起作用,我不确定 COR 模式是否符合我的目标。我尝试更改传播和隔离配置,但没有奏效。

4

2 回答 2

0

我认为两阶段提交协议是您需要使用的。

于 2020-07-31T21:21:01.510 回答
0

作为第一个选项,我会尝试将 A 和 B 的创建合并到单个事务中。也许可以在基类级别处理事务?另一种选择是将类FirstChainHandler和类SecondChainHandler合并为一个。这将使处理事务部分变得容易。

第二种选择增加了复杂性,所以如果不是绝对必要,我不会去那里。使用Saga和/或Compensating Transaction模式,您可以实现最终的一致性。

于 2020-08-01T09:25:36.507 回答