redis-auto-idempotent-spring-boot-starter 一个高并发下接口幂等性处理的自定义starter

只愿长相守 提交于 2020-05-07 18:19:50

网上已经有很多基于redis + token实现的幂等性接口的实现案例,但是集成到项目中比较繁琐,并不是很易用, 所以在已有轮子的基础之上,封装了一个基于spring data redis的高并发下的接口幂等性处理的自定义starter, 此自定义的starter实现原理参考此文 springboot+redis+Interceptor+自定义annotation实现接口自动幂等

我的具体实现可以浏览我的码云bwstudio-common

幂等处理的流程图与原来的轮子相同,就直接引入了 avatar

redis-auto-idempotent-spring-boot-starter的使用及其简单 只需要引入依赖,在配置文件中设置开启两个参数即可,如果启用成功,会在启动中看到下列输出:

avatar

redis-auto-idempotent-spring-boot-starter使用说明

  1. 在你的项目中引入依赖
        <dependency>
            <groupId>com.bwstudio.common</groupId>
            <artifactId>redis-auto-idempotent-spring-boot-starter</artifactId>
            <version>0.0.1</version>
        </dependency>

  1. 在spring boot项目的配置文件中加入一下两个配置, 比如application.properties中(yml文件请自行转换)

开启自动幂等性处理拦截器

redis-auto-idempotent.enabled=false

设置幂等性token的自动过期时间,单位:毫秒

redis-auto-idempotent.token-expire-time-in-ms=30000

  1. 在控制器方法上加上@AutoIdempotent, 比如
@RestController
public class TestIdempotenceController {

    @AutoIdempotent
    @PostMapping("/test")
    public String testIdempotence() {
        return "Hello World";
    }
}

  1. 启动demo

首先获取幂等性token,引入redis-auto-idempotent-spring-boot-starter会随你的项目自动启动一个控制器来提供获取幂等性token的api

GET localhost:8080/auto-idempotent/token

这时会你的spring项目连接的redis服务器中生成一个前缀为'autoidempotent_'的为幂等性请求服务的token,例如:

autoidempotent_B543E217C8014F8EAA109686D7903040

携带此token在demo的post请求头或请求体中设置参数 IDEMPOTENT_TOKEN 的值为上面的值

发起post请求到test测试效果

POST localhost:8080/test

第一次携带幂等性token发起请求会成功返回

'Hello world'

继续重复发起请求会提示

'请求失败, 重复的提交'

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!