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

相关推荐
Joy T10 分钟前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者11 分钟前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
天若有情67323 分钟前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
打工仔折腾 AI1 小时前
FastAPI 从本机到生产服务器:Nginx+Gunicorn+Uvicorn 完整部署实录
人工智能·后端·python·nginx·fastapi·gunicorn
IT_陈寒1 小时前
Java空指针这次真把我坑惨了
前端·人工智能·后端
moMo2 小时前
LangChain 到 LangGraph: RAG 知识库改造
后端
用户574385305112 小时前
元数据驱动的通用 CRUD 后端框架 (3- createBusiness 工厂:三层装配 + 一行出 REST)
后端
西峰u2 小时前
Java单例模式|从基础到多线程安全
java·java单例模式
ClinicTech2 小时前
实验室洗瓶机的清洗系统架构与自动化控制解析
java·python