哪些分布式事务的中间件可以保证幂等性?

https://img2.mukewang.com/5cbbd4ed0001eabb04160356.jpg

如图所示,bool withdraw(account_id, amount)函数表示:从account_id对应的账户中扣除amount数额的钱;如果扣除成功则返回true,账户余额减少amount;如果扣除失败则返回false,账户余额不变。
如果withdraw请求已经被服务器端正确处理,但服务器端的返回结果由于网络等原因被掉丢了,导致客户端无法得知处理结果。如果是在网页上,一些不恰当的设计可能会使用户认为上一次操作失败了,然后刷新页面,这就导致了withdraw被调用两次,账户也被多扣了一次钱。因此我们要做幂等控制。
问题:
如果采用采用分布式事务,通过引入支持分布式事务的中间件来保证withdraw功能的事务性,有哪些中间件可以提供这些功能?具体怎么实现的啊?

qq_遁去的一_1
浏览 780回答 4
4回答

郎朗坤

涉及到失败重试,所以提供方的接口必须是幂等的,但是诸如扣减库存这种接口很难做到幂等,所以建议把失败接口失败重试关闭。对于题主的这个场景,主要的原因是调用方因为超时失败了,没有对amount进行回滚,因为我猜的没错的话这应该是一个RPC调用吧,所以题主确实需要分布式事务来执行事务回滚,具体可以参考ByteTCC用TCC的方式也是一种解决方案
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java