Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wuxudong opened this issue Aug 30, 2018 · 4 comments
Open

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

wuxudong opened this issue Aug 30, 2018 · 4 comments

Comments

@wuxudong
Copy link

以 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 方法来解决这些问题, 可靠消息 只能 保证 减库存操作一定被发送到, 但能不能扣减成功就没办法了?

@yu199195
Copy link
Member

是的

@wuxudong
Copy link
Author

wuxudong commented Aug 31, 2018

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

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

@tangaoyu520hf
Copy link

tangaoyu520hf commented Mar 1, 2019

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

@yu199195
Copy link
Member

yu199195 commented Mar 1, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants