Gateway配合sentinel自定义限流_Spring Cloud Gateway 扩展支持动态限流

06a87ad09edbbc385e38a539f7470079.png


之前分享过 一篇 限流实现, 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现

原生RequestRateLimiter 的不足

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

Sentinel Spring Cloud Gateway 流控支持

Sentinel 是什么?

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

pom 依赖

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

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

af82cee1b3d9b129367b60cbc0996386.png
  • 常用限流策略 常量
  • 核心源码解析 SentinelGatewayFilter sentinel通过扩展Gateway的过滤器,通过选择的不同GatewayParamParser 过处理请求限流因子和数据源中的配置进行比较
    源码如下:

效果演示

  • 以上nacos 配置为 每秒只能通过5个请求,我们使用jmeter 4.0 来并发10个线程测试一下
3cdd613c8b404ab6d386f22fca2fab82.png
52aed44c0bf5f72d7f742c9ee36a32d7.png
dd73d863b69eeb2e60d0478b3d12572a.png
  • 通过上图可以结果证明sentinel限流确实有效

动态修改限流参数

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

总结

  • 以上源码参考个人项目 . https://gitee.com/log4j/pig
  • . 欢迎关注我们获得更多的好玩JavaEE 实践
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值