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 可实现用户级/接口级等精细化限流
相关推荐
未来之窗软件服务3 小时前
终端优先同步架构终端场景下轻量化、高可用通信模型-东方仙盟
架构·东方仙盟·阿雪技术观·网络震荡·dns污染·数据中继器·边界网关
喵了几个咪4 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
Flynt4 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
程序员清风4 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律5 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵5 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅6 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_6 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界8 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
IT_陈寒8 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端