问题记录:业务方调用支付方发放红包接口

现象:一次活动,每个用户只能领一次红包,但是有个用户领了两次

原因:一次活动 ,业务方调用支付方发放红包接口 

1、业务方调用支付方,调用超时,回填调用状态 1(0是调用成功),并且返回界面提示“服务异常,请稍后再试”  这步没问题

但是支付方已经接受到了请求,是根据业务方的订单id 去给用户发钱  虽然前面的一步业务方调用失败,但是,支付方还是根据订单id支付了一次

2、用户看到提示,又操作了一次领取  ,业务方新产生一个订单,支付方 重新支付了一次

 

 

解决方案:

1基于支付方根据一个订单id支付一次的方式   业务方第二次在调用的时候 订单id跟第一次一样    因为活动一人只能领取一次  判断account_id如果是一样的话(根据account_id幂等)  产生同一个订单id

 

2数据库层面,要判断是否是同一个account_id ,需要全表扫描一次,消耗性能 —解决方法,对account_id加索引

 

思考:1如何有效制造服务调用超时 2开发如何根据业务的特点,加上幂等判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值