Spring-cloud学习笔记—基于Nacos持久化Sentinel流控和降级
1. 改造成持久化项目的过程
Sentinel Dashboard中添加的规则数据存储在内存
,微服务停掉规则数据就消失,在⽣产环境下不合适。我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据。引入jar包
<!-- Sentinel支持采用 Nacos 作为规则配置数据源,引入该适配依赖 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>
修改配置文件
:其中配置的data-id
要添加到nacos
中# Sentinel Nacos数据源配置,Nacos中的规则会自动同步到sentinel流控规则中 sentinel: datasource: # 自定义的流控规则数据源名称 flow: nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} data-id: ${spring.application.name}-flow-rules groupId: DEFAULT_GROUP data-type: json rule-type: flow # 类型来自RuleType类 # 自定义的降级规则数据源名称 degrade: nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} data-id: ${spring.application.name}-degrade-rules groupId: DEFAULT_GROUP data-type: json rule-type: degrade # 类型来自RuleType类
2. 添加自定义的流控规则
向naccos中添加自定义的流控规则
:Nacos Server中添加对应规则配置集(public命名空间—>DEFAULT_GROUP中添加)
,流控规则配置集${spring.application.name}-flow-rules
,nacos中的配置持久化配置如下:[ { "resource":"findResumeOpenState", "limitApp":"default", "grade":1, "count":1, "strategy":0, "controlBehavior":0, "clusterMode":false } ]
流控规则所有属性来⾃源码FlowRule类
resource
:资源名称limitApp
:来源应⽤grade
:阈值类型 0 线程数 1 QPScount
:单机阈值strategy
:流控模式,0 直接 1 关联 2 链路controlBehavior
:流控效果,0 快速失败 1 Warm Up 2 排队等待clusterMode
:true/false 是否集群
3.添加自定义的降级规则配置集
降级规则配置集 ${spring.application.name}-degrade-rules
[ { "resource":"findResumeOpenState", "grade":2, "count":1, "timeWindow":5 } ]
降级规则配置集的所有属性来⾃源码DegradeRule类
resource
:资源名称grade
:降级策略 0 RT 1 异常⽐例 2 异常数count
:阈值timeWindow
:时间窗
4.Sentinel中的Rule 源码体系结构
5.注意
- ⼀个资源可以同时有多个限流规则和降级规则,所以配置集中是⼀个json 数组
Sentinel控制台中修改规则
,仅是内存中⽣效,不会修改Nacos中的配置值,重启后恢复原来的值;Nacos控制台中修改规则
,不仅内存中⽣效,Nacos中持久化规则也⽣效,重启后规则依然保持