Spring Cloud Alibaba Gateway 集成 Redis 限流的完整配置

以下是基于 Spring Cloud Alibaba Gateway 集成 Redis 限流的完整配置:

SpringCloud+全栈Java微服务+分布式,全栈开发springcloud微服务技术栈课程

配置示例

在 application.yml 或 bootstrap.yml 中添加以下配置:

yaml 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password:  # 如果有密码则填写

  cloud:
    gateway:
      routes:
        - id: rate_limit_route
          uri: http://example.com
          predicates:
            - Path=/api/**
          filters:
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 10  # 每秒允许的请求数
                redis-rate-limiter.burstCapacity: 20  # 峰值请求容量
                redis-rate-limiter.requestedTokens: 1  # 每个请求消耗的令牌数

核心代码实现

SpringCloud+全栈Java微服务+分布式,全栈开发springcloud微服务技术栈课程

1. 添加依赖

确保 pom.xml 包含以下依赖:

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
2. 自定义限流键解析器

创建 KeyResolver 实现类(例如基于 IP 限流):

java 复制代码
@Bean
public KeyResolver ipKeyResolver() {
    return exchange -> Mono.just(
        exchange.getRequest().getRemoteAddress().getAddress().getHostAddress()
    );
}

SpringCloud+全栈Java微服务+分布式,全栈开发springcloud微服务技术栈课程

3. 注册 KeyResolver

在配置中引用自定义的解析器:

yaml 复制代码
filters:
  - name: RequestRateLimiter
    args:
      key-resolver: "#{@ipKeyResolver}"
      redis-rate-limiter.replenishRate: 10
      redis-rate-limiter.burstCapacity: 20

验证限流效果

访问 /api/ 开头的接口时:

  • 正常情况:每秒允许 10 个请求
  • 突发流量:最高允许 20 个请求(超出后返回 HTTP 429 状态码)

SpringCloud+全栈Java微服务+分布式,全栈开发springcloud微服务技术栈课程

注意事项

  1. Redis 需保持可用状态
  2. 可通过调整 burstCapacity 应对突发流量
  3. 自定义 KeyResolver 可实现用户级/接口级等精细化限流
相关推荐
打工仔折腾 AI1 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
Learn_PLC1 小时前
自动化工程师Demand与工业机器人技术发展的未来趋势分析
架构
可乐鸡翅yeah_1 小时前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
Learn_PLC2 小时前
PLC编程就业前景与自动化人才短缺解析及技能提升补贴政策
架构
张彦峰ZYF2 小时前
加了锁不等于扛得住争用:synchronized、显式锁与 CAS 的语义分层、争用代价账本与选型判据
后端·同步设施·内置锁的四种状态与单向升级·可重入的由来与四条硬边界·显式锁的状态字段与等待队列·读写锁与邮戳锁·一次同步的开销账本
写后端的胖头鱼2 小时前
【高频面试题】FullText 全文索引(MySQL)
数据库·mysql·索引·全文索引
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
Gopher_HBo2 小时前
zap采样器与性能优化内幕
后端
变量探索SEQVEC2 小时前
我埋了 8 个假文件,看谁会上钩:12 天 502 次扫描实录
后端
llqbzllll2 小时前
HashMap 的核心结构:从一次 put 看到扩容、桶迁移与树化边界
后端