微服务提现问题

现有两个微服务:
用户服务.
用户数据字段
uid
allow_withdraw(1:允许提现,0:禁止提现)
财务服务
财务系统数据字段
account(对应用户.uid)amount(余额)
现在提现功能,需要先判断allow_withdraw,再判断余额是不是足够。
在users-service中加一个节点/users/withdraw
执行的时候,会先判断allow_withdraw状态,再通过HTTP请求finance-service中的/finance/amount得到余额再判断一下余额是否足够(问题就在这里,这里的判断是无法保证的)
有什么好的实现思路呢?
一只萌萌小番薯
浏览 415回答 2
2回答

Smart猫小萌

finance-service里应该有针对amount的CRUD操作,用户的提现应该放在finance-service里,users-service里只提供allow_withdraw便可。调用finance-service里的withdraw时,向users-service询问是否allow_withdraw,如果可以,在事务中对amount进行操作,并提交;如果失败,回滚,处理之。好多的提现,只有一个提示,提现请求已提交,然后通过异步消息告诉你是否提现成功。

万千封印

booleanallow=allow_withdraw()if(allow){check()withdraw()}典型的"检查再计算"操作,所以要放到一个事务里面,保证原子性。这个属于分布式事务的范畴啦~~~~微服务最头疼的。。。。。。网上搜索下吧,很多解决方法。不过最好的方法是:合并服务,把分布式事务消除掉,改成普通事务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript