如何保证分布式系统接口幂等?

为什么要保证接口幂等

这是实战经常遇到的一个问题,举个例子:我们系统的开票接口受理对方系统的报文(结算单号settleNo+开票单号ticketNo)由于网络抖动或者前端提交多次导致同一笔重复请求,如果不设置幂等,我们系统就会受理多笔相同的请求,最终可能导致多次重复开票的问题。所以我们要保证接口幂等,使得重复请求只会成功一次。

同步锁synchronized可行吗

同步锁synchronized只能解决单机Jvm的接口幂等,由于分布式系统有很多台机器,该方法无法应对。

如何保证分布式接口幂等

  1. mysql唯一索引 ,将结算单号settleNo+开票单号ticketNo设置为唯一索引,这样第一笔入库,第二笔重复的就会触发duplicateException然后回滚。
  2. redis缓存,利用redis缓存,使用set key value 命令, settleNo+开票单号ticketNo作为key,state作为value,第一次请求过来,state从0变为1表明已经受理,第二次再过来发现state是1就不做后续处理。

*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值