現有兩個微服務:用戶服務.用戶數據字段uidallow_withdraw (1: 允許提現,0:禁止提現)財務服務財務系統(tǒng)數據字段account (對應 用戶.uid) amount (余額)現在提現功能,需要先判斷 allow_withdraw,再判斷余額是不是足夠。在 users-service 中加一個節(jié)點 /users/withdraw執(zhí)行的時候,會先判斷 allow_withdraw 狀態(tài),再通過 HTTP 請求 finance-service 中的 /finance/amount 得到余額再判斷一下余額是否足夠(問題就在這里,這里的判斷是無法保證的)有什么好的實現思路呢?
2 回答

皈依舞
TA貢獻1851條經驗 獲得超3個贊
boolean allow = allow_withdraw()
if(allow) {
check()
withdraw()
}
典型的"檢查再計算"操作,所以要放到一個事務里面,保證原子性。
這個屬于分布式事務的范疇啦~~~~微服務最頭疼的。。。。。。
網上搜索下吧,很多解決方法。
不過最好的方法是:合并服務,把分布式事務消除掉,改成普通事務。

寶慕林4294392
TA貢獻2021條經驗 獲得超8個贊
finance-service 里應該有針對 amount 的 CRUD 操作,用戶的提現應該放在 finance-service 里,users-service 里只提供 allow_withdraw 便可。
調用 finance-service 里的 withdraw 時,向 users-service 詢問是否 allow_withdraw ,如果可以,在事務中對 amount 進行操作,并提交;如果失敗,回滾,處理之。
好多的提現,只有一個提示,提現請求已提交,然后通過異步消息告訴你是否提現成功。
添加回答
舉報
0/150
提交
取消