• Stars
    star
    138
  • Rank 264,508 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 4 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

spring boot idempotent starter

idempotent 幂等处理方案

是对原有 idempotent 代码重构和功能增强。

非常感谢 idempotent 作者的分享。

1.原理

1.请求开始前,根据key查询 查到结果:报错 未查到结果:存入key-value-expireTime key=ip+url+args

2.请求结束后,直接删除key 不管key是否存在,直接删除 是否删除,可配置

3.expireTime过期时间,防止一个请求卡死,会一直阻塞,超过过期时间,自动删除 过期时间要大于业务执行时间,需要大概评估下;

4.此方案直接切的是接口请求层面。

5.过期时间需要大于业务执行时间,否则业务请求1进来还在执行中,前端未做遮罩,或者用户跳转页面后再回来做重复请求2,在业务层面上看,结果依旧是不符合预期的。

6.建议delKey = false。即使业务执行完,也不删除key,强制锁expireTime的时间。预防5的情况发生。

7.实现思路:同一个请求ip和接口,相同参数的请求,在expireTime内多次请求,只允许成功一次。

8.页面做遮罩,数据库层面的唯一索引,先查询再添加,等处理方式应该都处理下。

9.此注解只用于幂等,不用于锁,100个并发这种压测,会出现问题,在这种场景下也没有意义,实际中用户也不会出现1s或者3s内手动发送了50个或者100个重复请求,或者弱网下有100个重复请求;

2.使用

    1. 引入依赖
版本 支持
0.3.0 适配 SpringBoot3.x
0.1.0 适配 SpringBoot2.x
<dependency>
    <groupId>com.pig4cloud.plugin</groupId>
    <artifactId>idempotent-spring-boot-starter</artifactId>
    <version>0.1.0</version>
</dependency>

- 使用快照

<dependency>
    <groupId>com.pig4cloud.plugin</groupId>
    <artifactId>idempotent-spring-boot-starter</artifactId>
    <version>0.1.1-SNAPSHOT</version>
</dependency>

<repositories>
  <repository>
      <id>snapshots</id>
      <name>Excel Snapshots</name>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
      <releases>
          <enabled>false</enabled>
      </releases>
  </repository>
</repositories> 
    1. 配置 redis 链接相关信息
spring:
  redis:
    host: 127.0.0.1
    port: 6379

理论是支持 redisson-spring-boot-starter 全部配置

    1. 接口设置注解
@Idempotent(key = "#demo.username", expireTime = 3, info = "请勿重复查询")
@GetMapping("/test")
public String test(Demo demo) {
    return "success";
}

idempotent 注解 配置详细说明

    1. 幂等操作的唯一标识,使用spring el表达式 用#来引用方法参数 。 可为空则取 当前 url + args 做表示
String key();
    1. 有效期 默认:1 有效期要大于程序执行时间,否则请求还是可能会进来
	int expireTime() default 1;
    1. 时间单位 默认:s (秒)
TimeUnit timeUnit() default TimeUnit.SECONDS;
    1. 幂等失败提示信息,可自定义
String info() default "重复请求,请稍后重试";
    1. 是否在业务完成后删除key true:删除 false:不删除
boolean delKey() default false;

微信群

More Repositories

1

pig

↥ ↥ ↥ 点击关注更新,基于 Spring Cloud 2023 、Spring Boot 3.3、 OAuth2 的 RBAC 权限管理系统
Java
5,775
star
2

excel-spring-boot-starter

本项目旨在为用户提供一个便捷的 Excel 导出解决方案。基于阿里巴巴的 EasyExcel 库,结合 Spring Boot 框架,封装并优化了 Excel 文件的导出流程,帮助开发者更高效地实现数据导出功能。
Java
429
star
3

easy-captcha

https://github.com/whvcse/EasyCaptcha增强JAVA11
Java
309
star
4

oss-spring-boot-starter

兼容S3协议的通用文件存储工具类
Java
244
star
5

multilevel-cache-spring-boot-starter

spring cache 多级缓存扩展
238
star
6

pig-ui

🚀 The best rbac web framework. base on Spring Boot 3.2、 Spring Cloud 2023、 OAuth2 . Give a star
Vue
238
star
7

ureport-spring-boot-starter

UReport2 是一款基于架构在 Spring 之上纯 Java 的高性能报表引擎
Java
57
star
8

nacos-datasource-plugin-dm8

nacos 达梦数据库插件
Java
27
star
9

nacos-datasource-plugin-oracle

nacos oracle 持久化数据库插件
PLSQL
16
star
10

docker-mirror

自动化搞定 Docker 镜像操作
15
star
11

nacos-datasource-plugin-pg

nacos postgresql 数据库插件
Java
13
star
12

pig-ui-electron

pig-ui的 electron 移植版(或者叫增强,因为他们并不冲突)
Vue
12
star
13

nacos-datasource-plugin-kingbase

nacos 人大金仓数据库存储插件
Java
11
star
14

fastdfs-spring-boot-starter

fastdfs spring boot start
Java
10
star
15

RuoYi-Vue

若依v3.8 前后端分离 适配PIGX v4.6 单点登录示例
Java
8
star
16

anti-reptile-spring-boot-starter

反爬组件
Java
7
star
17

pigx-mini-login

pigx 整合小程序登录示例源码
JavaScript
6
star
18

Ruoyi-vue-pig

pig 3.6 整合 ruoyi 3.8 前后端分离示意项目
Java
5
star
19

spring-cloud-pig-mesh

自己实现一套 spring cloud
Java
5
star
20

aliyun-sms-spring-boot-starter

阿里云短信发送工具
Java
4
star
21

CGTM

Code Generation Template Marketplace
Vue
3
star
22

beanstalkd-spring-boot-starter

Beanstalkd分布式内存队列系统 的 spring boot starter 封装
Java
2
star
23

rocketmq-spring-boot3-starter

RocketMQ SpringBoot 3.0 Starter
2
star
24

nacos-datasource-plugin-highgo

nacos 瀚高数据库存储插件
Java
2
star
25

jeesite5

pig 3.6 整合 jeesite 5.x 前后端分离示意项目
JavaScript
1
star
26

start-spring-io-default-val-extension

Chrome 插件 start.spring.io 创建项目时指定一些默认值
JavaScript
1
star
27

aj-captcha

Java
1
star
28

docker-ocr-image

Dockerfile
1
star