什么是幂等:同一次业务多次请求(超时重试、调用多次),对结果的影响与一次请求是一致的。
一个简易的下单接口:
1.入参校验(参数校验格式、字段非空等)
2.添加分布式锁(Redisson看门狗机制),键值是第三方工单号
3.业务校验(其中会有校验三方订单号是否存在)
4.订单服务数据落库,本地事务:订单数据、订单关联数据(第三方工单号唯一索引)
5.通知三方,比如通知用户服务、编排服务、消息队列等
以上例子中,在2中使用分布式锁,保持多机多次请求,只有一台服务在处理该接口业务,3中的业务校验也是控制幂等的操作,最后4数据落库时也会校验订单号、状态等幂等性,其他比如回调通知等,也是一样的处理,这样我们抽出来处理幂等的几个点:
1.全局唯一ID
2.数据库唯一索引
3.状态控制
4.分布式锁
5.数据库乐观锁(version,CAS)
以上只是一些解决办法,还要具体问题具体分析。