springboot接口限流操作
- 一、用guava包
-
- 1.1依赖引入
- [1.2 限流配置注册](#1.2 限流配置注册)
- [1.3 接口拦截器配置](#1.3 接口拦截器配置)
- [1.2 mvc注册拦截器](#1.2 mvc注册拦截器)
- 二、用redis接口限流
一、用guava包
1.1依赖引入
java
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.5.0-jre</version>
<scope>compile</scope>
</dependency>
1.2 限流配置注册
java
@Configuration
public class RateLimiterConfig {
// 每秒允许的请求数
private static final double RATE = 3.0;
// 突发流量处理能力(允许的突发请求数)
private static final int BURST = 5;
@Bean
public RateLimiter rateLimiter() {
// 创建限流器,RATE为每秒允许的请求数
RateLimiter rateLimiter = RateLimiter.create(RATE);
return rateLimiter;
}
}
1.3 接口拦截器配置
java
@Component
public class RateLimitInterceptor implements HandlerInterceptor {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private RateLimiter rateLimiter;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 尝试获取令牌
boolean acquired = rateLimiter.tryAcquire();
logger.info("RateLimitInterceptor:{}",acquired);
if (!acquired) {
// 如果没有令牌,拒绝请求
response.setStatus(429); // 429 Too Many Requests
response.getWriter().write("Too many requests. Please try again later.");
return false;
}
return true;
}
}
1.2 mvc注册拦截器
java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private RateLimitInterceptor rateLimitInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(rateLimitInterceptor);
}
}