最近发现一个问题,前段在掉接口的时候。有的接口响应比较慢,客户以为没有反应,发送了多次请求。最后导致请求大量积压。都是重复请求。
没有体现幂等性。这里使用自定义注解加上guacache 的过期自动消失+aop 切片 来实现防止重复提交。
首先写一个自定义的注解。
什么参数都没有。
在写一个guavacache 的工具类
这里指定并级别。和自动过期时间。这里我们默认过期是三秒。
在写一个aop
这里使用了环绕通知和后置通知。
先从request 里面获取请求的sessionid和url.,作为唯一的key.
环绕通知里面的逻辑。
第一次先判断有没有get(key),没有在put
guavacache put key, value 是false. 先用threadloacl set进去 key。在下面的后置处理器在获取。
后置处理器after 里面的逻辑。在cachekey 把key 变成"" 变回初始化状
先把threadlocal remove 了。防止内存泄漏。后置处理器的逻辑只有当环绕通知结束以后,才执行。当环绕通知还没结束,另外一个请求进来的时候。
这个时候就弹出请不要重复提交。
这里我们先写一个接口测试一下。
先测试正常情况
就是响应比较快
15毫秒
我们把他睡三秒