我们的余额表放在余额数据库里,订单表放在订单数据库里,交易流水表放在交易流水系统里。所有服务是通过dubbo这个中间件来进行调用的。
现在有个问题就是:
用户支付宝支付了充值订单后,支付回调我们的后台系统,后台会修改订单支付状态为已支付,然后从余额 表里增加余额,但是就是在增加余额的时候成功了,当接下来调用交易流水服务的时候,后台在那一瞬间宕机了。
因为是都是不同的库,事务属于分布式事务,造成余额表修改成功了,但是交易流水表记录流水数据失败了。然后支付宝又再次回调我们后台,导致余额表又修改了一次余额。
现在我的解决办法是加多一张余额费用记录表到余额数据库里头,主要字段就是orderNo(订单号),fee(增加费用) ,如果某订单支付成功了,这个表就会增加一条数据,把余额增加和余额费用记录表做成同一个事务,支付宝每次回调都会先查余额费用记表录里有没有数据
1)没数据就先修改余额,然后插入余额费用记录表
2)有数据,就直接跳过余额加款这个操作
这样目前暂时就是没造成余额修改成功,交易流水表扣款失败,导致支付宝重复回调,重复扣款的问题了。
但是这样我觉得还是不大妥,不知还有什么方案好使。