Spring cloud gateWay 限流器限流(一)
2023-04-18 13:15:55 时间
转载请注明出处:
spring cloud 提供了限流操作的功能,其使用步骤如下:
1.引入maven依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency>
2.封装限流过滤器的方法:
import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; /** * spring cloud 的限流器配置 * 通过KeyResolver来指定限流的Key,比如我们需要根据用户来做限流,IP来做限流等等。 */ @Configuration public class SpringCloudRateLimiter { /** * 用户限流 * 使用这种方式限流,请求路径中必须携带userId参数。 * @return */ @Bean KeyResolver userKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId")); } /** * ip限流 * @return */ @Bean public KeyResolver ipKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
// return exchange -> Mono.just(exchange.getRequest().getHeaders().getFirst("X-Forwarded-For"))
}
/** * 接口限流 * 获取请求地址的uri作为限流key * @return */ @Bean KeyResolver apiKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getPath().value()); } }
3.配置config中的yaml过滤配置:
server: port: 8084 spring: redis: host: 127.0.0.1 port: 6379 cloud: gateway: routes: - id: fsh-house uri: lb://fsh-house predicates: - Path=/house/** filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 # 令牌桶每秒填充平均速率
redis-rate-limiter.burstCapacity: 20 # 令牌桶的上限
key-resolver: "#{@ipKeyResolver}" # 使用SpEL表达式从Spring容器中获取Bean对象
- filter名称必须是RequestRateLimiter
- redis-rate-limiter.replenishRate:允许用户每秒处理多少个请求
- redis-rate-limiter.burstCapacity:令牌桶的容量,允许在一秒钟内完成的最大请求数
- key-resolver:使用SpEL按名称引用bean
4. spring cloud gateway
spring cloud gateway 限流使用的 也是通过redis lua 脚本进行交流,其位置如下:
相关文章
- 微软 Windows 11 测试版 Build 22000.184 发布,带来任务栏、开始菜单 Bug 解决方法
- Edge新增“另存为PDF”右键选项 允许用户直接将网页保存为PDF
- Linux 虚拟网络设备之 bridge
- HarmonyOS 基础之线程管理
- Linux内核中Container_Of宏的详细解释
- 升级Windows 11可能会加密硬盘 有个按钮不要碰
- 微软:Windows 11 将带来 CPU 和内存优化,电脑运行多个应用速度更快
- 基于HarmonyOS控制Hi3861小车之信息通信
- 微软深度优化CPU/内存占用:相同硬件下 运行Windows 11比Windows 10快得多
- StartIsBack预览版开始兼容Windows 11 可以找回经典开始菜单和任务栏
- 升级Windows 11可能会加密硬盘 这个按钮不要碰
- 仅3GB且不更新?这版Windows 10系统很少人知道,运行流畅堪比Windows 7
- Firefox 92 火狐浏览器发布:优化内存管理,macOS 版多处改进
- Ubuntu Service脚本编写示例
- Firefox 94计划为卸载标签功能引入about:unloads页面
- 如何快速的在 Kubernetes 上部署云原生微服务网关 APISIX
- Panay预热Windows 11全新Photos:带来新的视觉体验
- Windows 11全新设计语言Fluent,引领设计新趋势
- Linux内核输出的日志去哪里了
- Linux 5.15改进系统内存调用 可更快释放垂死进程的资源