springboot接口限流操作

springboot接口限流操作

一、用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);
    }

}

二、用redis接口限流

2.1

相关推荐
lili00124 分钟前
CC GUI 插件架构剖析:如何为 JetBrains IDE 打造完整的 AI 编程工作台
java·ide·人工智能·python·架构·ai编程
Royzst7 分钟前
学生信息管理案例
java
爱棋笑谦9 分钟前
单元测试简述
java
音符犹如代码17 分钟前
Docker 一键部署带有 TimescaleDB 插件的 PostgreSQL
java·运维·数据库·后端·docker·postgresql·容器
LucianaiB23 分钟前
从模型护栏到工程门禁:基于 XGuard 二创一个 Agent/CI 动态策略安全护栏
后端
sleepcattt28 分钟前
Java反射技术
java
小锋java123429 分钟前
【技术专题】Spring AI 2.0 - Advisors —— 拦截器模式增强AI能力
java·人工智能
AI人工智能+电脑小能手29 分钟前
【大白话说Java面试题 第56题】【JVM篇】第16题:JVM有哪些垃圾收集器?
java·开发语言·jvm·面试
铁皮饭盒36 分钟前
同样是算力巨头,为什么华为死磕英伟达,AMD 却 "躺平看戏"?
前端·后端
文心快码BaiduComate36 分钟前
用Comate 7天完成”鹅鸭杀”游戏网站开发
前端·后端·程序员