微服务提现问题

发布于 2022-09-05 04:18:31 字数 520 浏览 18 评论 0

现有两个微服务:

  1. 用户服务.

    用户数据字段

    uid

    allow_withdraw (1: 允许提现,0:禁止提现)

  2. 财务服务

    财务系统数据字段

    account (对应 用户.uid)
    amount (余额)


现在提现功能,需要先判断 allow_withdraw,再判断余额是不是足够。

users-service 中加一个节点 /users/withdraw

执行的时候,
会先判断 allow_withdraw 状态,
再通过 HTTP 请求 finance-service 中的 /finance/amount 得到余额
再判断一下余额是否足够(问题就在这里,这里的判断是无法保证的

有什么好的实现思路呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空‖城人不在 2022-09-12 04:18:31

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

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

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

爱,才寂寞 2022-09-12 04:18:31
boolean allow = allow_withdraw()
if(allow) {
    check()
    withdraw()
}

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

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

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

萌能量女王 2022-09-12 04:18:31

余额是否足够不是应该根据用户提现的金额或者设定固定的提现金额来判断嘛?为什么会无法保证。只要后台比对金额不一致或者超过就失败。

滥情空心 2022-09-12 04:18:31

提现过程是一个整体事务,是不能拆分的。
建议做法如下:

  1. /finance/amount中开启事务

  2. 判断是否允许提现

  3. 判断余额是否足够

  4. 判断都通过的话,提现操作

最后记得提交事务

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文