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

相关推荐
陈随易1 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
AI你一生一世3 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
考虑考虑4 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨4 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
AI开源软件5 小时前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
Patrick_Wilson6 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术6 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站6 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端