myth icon indicating copy to clipboard operation
myth copied to clipboard

关于分布式事务回滚的疑问

Open wuxudong opened this issue 5 years ago • 4 comments

以 demo中的 myth-demo-spring-cloud-inventory 为例,

order 模块的 PaymentServiceImpl.makePayment 先询问了 account 模块的余额 和 inventory 模块的 库存, 假设目前 余额和库存 都足够, 然后 发起了 accountClient.payment 和 inventoryClient.decrease

这时 accountClient.payment 正常执行了。 而 inventoryClient.decrease 由于 并发的存在, 可能这时 库存已经被别人的订单 减为 0, 从而 这次的 inventoryClient.decrease 抛出了 MythRuntimeException("spring cloud inventory-service 库存不足!")

那这种情况下, account 模块 应该不会被回滚吧? 是不是 只能用tcc 方法来解决这些问题, 可靠消息 只能 保证 减库存操作一定被发送到, 但能不能扣减成功就没办法了?

wuxudong avatar Aug 30 '18 12:08 wuxudong

是的

yu199195 avatar Aug 31 '18 08:08 yu199195

但像例子里的 订单/余额/库存 是个非常典型的场景,如果可靠消息 对于 这个例子 没法很好的处理的话, 应用场景 非常有限?

基于可靠消息的分布式事务一般都用在什么地方呢?

wuxudong avatar Aug 31 '18 08:08 wuxudong

@wuxudong 你这种情况就不适合用 最终一致性来解决

tangaoyu520hf avatar Mar 01 '19 10:03 tangaoyu520hf

myth 是可靠消息来解决分布式事务,如果你想要回滚的策略,请使用Riancat 或者hmily

yu199195 avatar Mar 01 '19 13:03 yu199195