当前位置:网站首页>接口非幂等性解决
接口非幂等性解决
2022-04-21 19:52:00 【哇塞大嘴好帅(我爱大嘴网)】
接口非幂等性解决
项目代码:https://github.com/DaZuiZui/Interface-idempotency
1.什么是幂等性
首先我们思考一下什么是幂等性,一个接口多次调用没有副作用就是幂等性,如果一个接口多次被调用产生的副作用就不是幂等性了,就出现了幂等性的问题
2.解决方案
2.1 分布式锁+token

我们保证幂等性是利用redis+token实现的,首先我们我们通过从服务器获取token,然后请求的时候携带token进行请求,如果token在redis中存在就把token删除,如果不存在就不进行操作。
3.code
3.1 分布式锁+token
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Controller层
@RestController
public class TestController {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/getToken")
public String getToken(){
String token = UUID.randomUUID().toString().substring(0,8);
redisTemplate.opsForValue().set(token,"1",60*10, TimeUnit.SECONDS);
return token;
}
@GetMapping("/sub")
public void sub(String token) throws InterruptedException {
//todo 业务操作
}
}
Aop层
@Aspect
@Component
public class TestAop {
@Autowired
private RedisTemplate redisTemplate;
@Before("execution(* com.dazuizui.idempotentinterface.controller.TestController.sub(..))")
public void befor(JoinPoint proceedingJoinPoint) throws Exception {
Object[] args = proceedingJoinPoint.getArgs();
boolean b = redisTemplate.delete(args[0]);
System.out.println(b);
if (!b){
//todo 日志操作
throw new Exception("幂等性操作");
}
}
}
版权声明
本文为[哇塞大嘴好帅(我爱大嘴网)]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_40102411/article/details/124328975
边栏推荐
猜你喜欢

MySQL修改root用户密码

Solutions informatiques pour les entreprises manufacturières haut de gamme, maintenance prédictive de l'équipement, des données et du système de la plate - forme de commerce électronique industriel

Modifying the root password of MySQL

Introduction to applet project files

thread

Mysql错误2005

一键安装ROS和rosdep(NO 墙)

2023年南开大学税务专硕考研上岸前辈备考经验指导

Today's sleep quality record is 83 points

URL to download network resources
随机推荐
SAP MTS/MTO/ETO专题之七:Q+M模式前后台操作
MySQL之2003-Can‘t connect to MySQL server on ‘localhost‘(10038)的解决办法
vtkjs介绍
HW-新员工考试-遍历
iMeta | EndNote调整完美引文格式教程(视频)
Wild road play QT, episode 31, glass cleaning game
juc-Queue接口以及其实现类
OpenCV之OpenCL介绍
Introduction to applet project files
2022下半年PMP考试开始报名,须知
杰理之低功耗休眠【篇】
使用CMake构建/导入目标
手动创建线程池
Registration for PMP examination starts in the second half of 2022. Notice
【暑期实习】字节客户端一面
多因子策略
Unity Socket
Today's sleep quality record is 83 points
QT 6.2.4 package of Conan package manager
学历造假、考试包过……考证市场有多乱