当前位置: 首页 > news >正文

RequestRateLimiterGatewayFilterFactory

一、功能说明

RequestRateLimiterGatewayFilterFactory 是 Spring Cloud Gateway 的流量控制组件,用于实现 API 请求速率限制,核心功能包括:

  1. 限制单位时间内的请求数量(如每秒10次)
  2. 防止服务被突发流量击垮(通过令牌桶算法)
  3. 支持分布式限流(依赖Redis存储)
  4. 可自定义限流维度(按IP、用户ID等)

二、工作原理图

1. 动态流程(时序图)
客户端 API网关 Redis 后端服务 请求 /api/data 1. 调用KeyResolver获取Key(如IP) 2. 返回当前令牌数 3. 扣减令牌 4. 转发请求 返回数据 200 OK 429 Too Many Requests alt [令牌充足] [令牌不足] 客户端 API网关 Redis 后端服务
2. 静态架构(类图)
调用
依赖
读写令牌
RequestRateLimiterGatewayFilterFactory
+apply(Config config)
RedisRateLimiter
-replenishRate: int
-burstCapacity: int
+isAllowed()
«interface»
KeyResolver
+resolve(exchange)
RequestRateLimiter
Redis

三、示例

1. 配置示例(application.yml)
spring:cloud:gateway:routes:- id: rate-limit-routeuri: http://backend-servicepredicates:- Path=/api/**filters:- name: RequestRateLimiterargs:redis-rate-limiter:replenishRate: 10  # 每秒生成10个令牌burstCapacity: 20  # 令牌桶容量key-resolver: "#{@ipKeyResolver}"  # 按IP限流
2. 自定义KeyResolver
@Bean
public KeyResolver ipKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
}
3. 触发限流时的响应
HTTP/1.1 429 Too Many Requests
X-RateLimit-Remaining: 0
X-RateLimit-Retry-After: 1
Content-Type: application/json{"error": "Too many requests","message": "You have exhausted your API request quota"
}

四、关键机制解析

组件作用
RedisRateLimiter基于令牌桶算法实现限流,依赖Redis存储计数
KeyResolver定义限流维度(如IP、用户ID、API路径等)
replenishRate令牌填充速率(如10=每秒10个请求)
burstCapacity突发流量容量(允许短时间内超过replenishRate的最大值)

五、应用场景

  1. 防御CC攻击:限制单个IP的疯狂刷接口行为
  2. API分级管控:为VIP用户分配更高的请求配额
  3. 服务降级:在系统高负载时主动限流保核心功能

如果需要更复杂的限流策略(如滑动窗口、漏桶算法),可以自定义实现 RateLimiter 接口。

http://www.lqws.cn/news/90271.html

相关文章:

  • 大数据 ETL 工具 Sqoop 深度解析与实战指南
  • 深入解析 Flask 命令行工具与 flask run命令的使用
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • LeetCode - 144. 二叉树的前序遍历
  • 电工基础【5】简单的电路设计接线实操
  • python直方图
  • 转战web3远程工作的英语学习的路线规划
  • 安全-JAVA开发-第一天
  • 数据可视化有哪些步骤?2025高效落地指南
  • 5分钟申请edu邮箱【方案本周有效】
  • 业务材料——半导体行业MES系统核心功能工业协议AI赋能
  • 深入解析C++引用:从别名机制到函数特性实践
  • TablePlus:一个跨平台的数据库管理工具
  • 04 APP 自动化- Appium toast 元素定位列表滑动
  • MATLAB仿真生成无线通信网络拓扑推理数据集
  • Ansys Zemax | 手机镜头设计 - 第 3 部分:使用 STAR 模块和 ZOS-API 进行 STOP 分析
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • PHP+mysql 美容美发预约小程序源码 支持DIY装修+完整图文搭建教程
  • Android系统进程优先级
  • 帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称
  • Python训练打卡Day41
  • 基于VLC的Unity视频播放器(四)
  • window 显示驱动开发-DirectX 视频加速 2.0
  • MATLAB实战:四旋翼姿态控制仿真方案
  • 榕壹云健身预约系统:多门店管理的数字化解决方案(ThinkPHP+MySQL+UniApp实现)
  • Ubuntu 系统部署 MySQL 入门篇
  • 碰一碰发视频-源码系统开发技术分享
  • 阿里云百炼全解析:一站式大模型开发平台的架构与行业实践
  • Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置
  • 深入剖析物联网边缘计算技术:架构、应用与挑战