10.Spring Cloud Alibaba学习笔记–Sentinel持久化规则
问题描述
一旦重启应用,Sentinel 规则消失。然而在生产环境需要将配置规则进行持久化。
持久化方法
将限流规则持久进 Nacos 保存,只要刷新 cloudalibaba-sentinel-server8401 某个rest 地址,Sentinel 控制台的流控规则就能看到,只要 Nacos 里面的配置不删除,针对 cloudalibaba-sentinel-server8401 上的流控规则持续有效。
步骤
POM
确保添加了以下依赖:
<!--SpringCloud ailibaba sentinel-datasource-nacos 持久化-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
YAML
添加 Nacos 数据源配置
server:
port: 8401
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard地址
#默认8719端口,假如被占用会自动从8719开始依次+1扫描
#直至找到未被占用的端口
port: 8719
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: cloudalibaba-sentinel-service
groupId: DEFAULT_GROUP
data-type: json
#规则类型: 流控规则
rule-type: flow
management:
endpoints:
web:
exposure:
include: '*'
feign:
sentinel:
enabled: true # 激活Sentinel对Feign的支持
spring.cloud.sentinel.datasource.ds.nacos.rule-type 的全部类型可以参考:
com.alibaba.cloud.sentinel.datasource.RuleType
/**
* flow 流控规则
*/
FLOW("flow", FlowRule.class),
/**
* degrade 降级规则
*/
DEGRADE("degrade", DegradeRule.class),
/**
* param flow 热点规则
*/
PARAM_FLOW("param-flow", ParamFlowRule.class),
/**
* system 系统规则
*/
SYSTEM("system", SystemRule.class),
/**
* authority 授权规则
*/
AUTHORITY("authority", AuthorityRule.class),
/**
* gateway flow 网关限流规则
*/
GW_FLOW("gw-flow",
"com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule"),
/**
* api 用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合
*/
GW_API_GROUP("gw-api-group",
"com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition");
添加 Nacos 业务规则配置
[
{
"resource": "/rateLimit/byUrl",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
参数说明:
- resource: 资源名称
- limitApp: 来源应用
- grade: 阈值类型,0 为线程数,1 为 QPS
- count: 单机阈值
- strategy: 流控模式,0 为直接,1 为关联,2 为链路
- controlBehavior: 流控效果,0 为快速失败,1 为 Warm Up,2 为排队等待
- clusterMode: 是否为集群
启动8401刷新Sentinel
访问
http://localhost:8401/rateLimit/byUrl
刷新 Sentinel
可以看到业务规则有了。
停止8401刷新Sentinel
流控规则已经没有了。
重新启动8401刷新Sentinel
访问
http://localhost:8401/rateLimit/byUrl
刷新 Sentinel
可以看到业务规则又有了,持久化验证通过。