这篇文章我们聊下如何做接口幂等性的处理。
我们知道在高并发及高可用的场景里面,系统会涉及到很多的重试,那么一定会涉及到数据重复提交的问题,那么如果遇到数据重复提交的话,那我们肯定是需要做接口幂等性的操作。在之前的问答里面有涉及到这一块,详见:《java接口中做幂等性有哪些方法?》。这篇文章主要讲解下基于redis来做接口幂等性处理的思路和方案。
先上一张基于redis的接口幂等性的方案图
其实总体来说我们分为两个步骤:
第一个步骤即我们在客户端发起请求的时候,首先向服务端请求一个请求A,向服务器申请一个request token,在获取到token之后,把token和请求的参数等组装到一个http请求里面,在发起第二个请求B。当发生重试的时候,我们只需要重试请求B即可,这样子无论重试多少次,那么请求B里面的token都是一模一样的。详见下图
第二个步骤我们把第一步骤里面返回的token联通业务请求的参数一起封装成一个requestB,向服务端请求,服务端判断token是否在redis里面存在,如果存在则进行正常业务处理,如果不存在,则代表是重复请求。流程如下:
备注:一般我们的token都是放在request header里面的。
还没有评论,来说两句吧...