为了账号安全,请及时绑定邮箱和手机立即绑定

微服务提现问题

微服务提现问题

德玛西亚99 2018-10-12 19:28:35
现有两个微服务:用户服务.用户数据字段uidallow_withdraw (1: 允许提现,0:禁止提现)财务服务财务系统数据字段account (对应 用户.uid) amount (余额)现在提现功能,需要先判断 allow_withdraw,再判断余额是不是足够。在 users-service 中加一个节点 /users/withdraw执行的时候,会先判断 allow_withdraw 状态,再通过 HTTP 请求 finance-service 中的 /finance/amount 得到余额再判断一下余额是否足够(问题就在这里,这里的判断是无法保证的)有什么好的实现思路呢?
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

boolean allow = allow_withdraw()

if(allow) {

    check()

    withdraw()

}

典型的"检查再计算"操作,所以要放到一个事务里面,保证原子性。

这个属于分布式事务的范畴啦~~~~微服务最头疼的。。。。。。
网上搜索下吧,很多解决方法。

不过最好的方法是:合并服务,把分布式事务消除掉,改成普通事务。


查看完整回答
反对 回复 2018-10-29
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

finance-service 里应该有针对 amount 的 CRUD 操作,用户的提现应该放在 finance-service 里,users-service 里只提供 allow_withdraw 便可。

调用 finance-service 里的 withdraw 时,向 users-service 询问是否 allow_withdraw ,如果可以,在事务中对 amount 进行操作,并提交;如果失败,回滚,处理之。

好多的提现,只有一个提示,提现请求已提交,然后通过异步消息告诉你是否提现成功。


查看完整回答
反对 回复 2018-10-29
  • 2 回答
  • 0 关注
  • 1073 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信