阿里限流神器Sentinel夺命连环 17 问? (9)

Sentinel默认限流规则是存储在内存中,只要服务重启之后对应得限流规则也会消失,实际的生产中肯定是不允许这种操作,因此限流规则的持久化迫在眉睫。

sentinel官方文档提供了两种持久化模式,分别如下:

阿里限流神器Sentinel夺命连环 17 问?

但是官方推荐使用Push模式,下面陈某就Push模式介绍一下持久化限流规则。这里使用Nacos作为配置中心。

盗用官方一张架构图,如下:

阿里限流神器Sentinel夺命连环 17 问?

1、添加依赖

这里需要添加一个依赖,如下:

<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> 2、配置文件中配置相关信息

既然使用到了Nacos作为配置中心,肯定是要配置相关的地址、dataId...

在application.yml配置文件中添加如下配置:

spring: cloud: sentinel: ## nacos持久化配置 datasource: ## 配置流控规则,名字任意 ds-flow: nacos: ## nacos的地址 server-addr: 127.0.0.1:8848 ## 配置ID dataId: ${spring.application.name}-flow ## 配置分组,默认是DEFAULT_GROUP groupId: DEFAULT_GROUP ## 配置存储的格式 data-type: json ## rule-type设置对应得规则类型,总共七大类型,在com.alibaba.cloud.sentinel.datasource.RuleType这个枚举类中有体现 rule-type: flow ## 配置降级规则,名字任意 ds-degrade: nacos: ## nacos的地址 server-addr: 127.0.0.1:8848 ## 配置ID dataId: ${spring.application.name}-degrade ## 配置分组,默认是DEFAULT_GROUP groupId: DEFAULT_GROUP ## 配置存储的格式 data-type: json ## rule-type设置对应得规则类型,总共七大类型,在com.alibaba.cloud.sentinel.datasource.RuleType这个枚举类中有体现 rule-type: degrade

上述配置仅仅展示了和持久化相关的一些配置,其他相关的配置代码就不贴了,稍后自己看源码。

spring.cloud.sentinel.datasource下可以配置多个规则,陈某这里只配置了限流和降级规则,其他规则自己尝试配一下,不同规则通过rule-type区分,其取值都在com.alibaba.cloud.sentinel.datasource.RuleType这个枚举类中,对应着sentinel中的几大统计规则。

3、在Nacos添加对应的规则配置

上述配置中对应的限流(flow)规则如下图:

阿里限流神器Sentinel夺命连环 17 问?

上述配置中对应的降级(degrade)规则如下图:

阿里限流神器Sentinel夺命连环 17 问?

先不纠结JSON数据里面到底是什么,先看效果,全部发布之后,Nacos中总共有了两个配置,如下图:

阿里限流神器Sentinel夺命连环 17 问?

上图中可以看到我们的两种规则已经在Nacos配置好了,来看一下sentinel中是否已经生效了,如下图:

阿里限流神器Sentinel夺命连环 17 问?

阿里限流神器Sentinel夺命连环 17 问?

哦了,已经生效了,由于是push模式,只要nacos中点击发布配置,相关规则配置就会推送到sentinel中。

上述源码在sentinel-openfeign-provider9009这个模块中,源码获取方式见文末。

伏笔:push模式只能保证Nacos中的修改推送到sentinel控制台,但是sentinel控制台的限流规则修改如何推送到Nacos呢?别着急,下面将会介绍..............

阿里限流神器Sentinel夺命连环 17 问?

4、JSON中到底怎么写?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzxyf.html