当前位置: 首页>后端>正文

spring cloud gateway 限制特定接口 spring gateway sentinel限流

之前分享过 一篇 《Spring Cloud Gateway 原生的接口限流该怎么玩》, 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现

原生RequestRateLimiter 的不足

  • 配置方式
spring:
  • RequestRateLimiterGatewayFilterFactory
Config
  • 在实际生产过程中,必定不能满足我们的需求
    生产中路由信息是保存数据库持久化或者配置中心,RequestRateLimiterGatewayFilterFactory 并不能随着持久化数据的改变而动态改变限流参数,不能做到实时根据流量来改变流量阈值

Sentinel 流控

       随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性,分布式系统的流量防卫兵。
从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

pom 依赖

配置本地路由规则及其sentinel数据源

spring:

配置nacos数据源中的限流策略

spring cloud gateway 限制特定接口 spring gateway sentinel限流,spring cloud gateway 限制特定接口 spring gateway sentinel限流_限流,第1张

  • 常用限流策略 常量
以客户端IP
  • 核心源码解析 SentinelGatewayFilter

sentinel通过扩展Gateway的过滤器,通过选择的不同GatewayParamParser 过处理请求限流因子和数据源中的配置进行比较 源码如下:

public Mono<

效果演示


  • 以上nacos 配置为 每秒只能通过5个请求,我们使用jmeter 4.0 来并发10个线程测试一下 
  • spring cloud gateway 限制特定接口 spring gateway sentinel限流,spring cloud gateway 限制特定接口 spring gateway sentinel限流_数据源_02,第2张

  • spring cloud gateway 限制特定接口 spring gateway sentinel限流,spring cloud gateway 限制特定接口 spring gateway sentinel限流_限流_03,第3张

  • spring cloud gateway 限制特定接口 spring gateway sentinel限流,spring cloud gateway 限制特定接口 spring gateway sentinel限流_限流_04,第4张

  • 通过上图可以结果证明sentinel限流确实有效

动态修改限流参数

  • sentinel-datasource-nacos 作为sentinel的数据源,可以从如上 nacos 管理台实时刷新限流参数及其阈值
  • 目前sentinel dashboard 1.6.2 暂未实现gateway 流控图形化控制  1.7.0会增加此功能

总结

  • 以上源码参考个人项目 基于Spring Cloud、OAuth2.0开发基于Vue前后分离的开发平台

https://www.xamrdz.com/backend/3gx1962948.html

相关文章: