问题
当微服务一旦重启,sentinel规则就会消失,我们需要将配置规则进行持久化。
解决
我们可以将这些规则持久化到Nacos,只要Nacos里面的配置不删除,sentinel控制台的规则就持续有效 。
步骤
1. mava中引入依赖
<!-- Sentinel Datasource 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<!-- Sentinel Datasource Nacos 依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2. yml中配置
server:
port: 8888
spring:
application:
name: sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard控制台服务地址
port: 8719 #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
datasource:
flow: #流控规则
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
degrade: #熔断规则
nacos:
# namespace: public
server-addr: localhost:8848
dataId: ${spring.application.name}-degrade-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade
我配置yml的时候遇到一个问题,我是打算配置在public的namespace上,但是我如果指定了namespace:public,那么sentinel中的熔断规则就没有显示,但是注释掉就显示了。不清楚是不是哪里配置有问题,还是public就是这样的,有没有大佬指点一下
3. Nacos中添加配置
接下来就去看看有没有配置成功吧
五种规则的json串及yml配置
需要自己删除掉json串的注释之后再添加到nacos中的配置中o
流控规则
Json :
[
{ 流控规则
// 资源名
"resource": "/test1",
// 针对来源,若为 default 则不区分调用来源
"limitApp": "default",
// 限流阈值类型(1:QPS;0:并发线程数)
"grade": 1,
// 阈值
"count": 1,
// 是否是集群模式
"clusterMode": false,
// 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)
"controlBehavior": 0,
// 流控模式(0:直接;1:关联;2:链路)
"strategy": 0,
// 预热时间(秒,预热模式需要此参数)
"warmUpPeriodSec": 10,
// 超时时间(排队等待模式需要此参数)
"maxQueueingTimeMs": 500,
// 关联资源、入口资源(关联、链路模式)
"refResource": "rrr"
}
]yml:
spring:
cloud:
sentinel:
datasource:
flow: #流控规则
nacos:
namespace: public
server-addr: localhost:8848
dataId: ${spring.application.name}-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
熔断规则
json:
[
{ 熔断规则
// 资源名
"resource": "/test2",
"limitApp": "default",
// 熔断策略(0:慢调用比例,1:异常比率,2:异常计数)
"grade": 0,
// 最大RT、比例阈值、异常数
"count": 200,
// 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)
"slowRatioThreshold": 0.2,
// 最小请求数
"minRequestAmount": 5,
// 当单位统计时长(类中默认1000)
"statIntervalMs": 1000,
// 熔断时长
"timeWindow": 10
}
]yml:
spring:
cloud:
sentinel:
datasource:
degrade: #熔断规则
nacos:
namespace: public
server-addr: localhost:8848
dataId: ${spring.application.name}-degrade-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade
热点规则
Json:
[
{
// 资源名
"resource": "/test3",
// 限流模式(QPS 模式,不可更改)
"grade": 1,
// 参数索引
"paramIdx": 0,
// 单机阈值
"count": 13,
// 统计窗口时长
"durationInSec": 6,
// 是否集群 默认false
"clusterMode": false,
"burstCount": 0,
// 集群模式配置
"clusterConfig": {
"fallbackToLocalWhenFail": true,
"flowId": 2,
"sampleCount": 10,
"thresholdType": 0,
"windowIntervalMs": 1000
},
// 流控效果(支持快速失败和匀速排队模式)
"controlBehavior": 0,
"limitApp": "default",
"maxQueueingTimeMs": 0,
// 高级选项
"paramFlowItemList": [
{
// 参数类型
"classType": "int",
// 限流阈值
"count": 222,
// 参数值
"object": "2"
}
]
}
]yml:
spring:
cloud:
sentinel:
datasource:
param-flow: #热点参数规则
nacos:
namespace: public
server-addr: localhost:8848
dataId: ${spring.application.name}-param-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: param-flow
系统规则
json:
[
{
// RT
"avgRt": 1,
// CPU 使用率
"highestCpuUsage": -1,
// LOAD
"highestSystemLoad": -1,
// 线程数
"maxThread": -1,
// 入口 QPS
"qps": -1
}
]yml:
spring:
cloud:
sentinel:
datasource:
system: #系统规则
nacos:
namespace: public
server-addr: localhost: 8848
dataId: ${spring.application.name}-system-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: system
授权规则
Json:
[
{
// 资源名
"resource": "/test4",
// 流控应用
"limitApp": "app1,app2",
// 授权类型(0代表白名单;1代表黑名单。)
"strategy": 0
}
]yml:
spring:
cloud:
sentinel:
datasource:
authority: #授权规则
nacos:
namespace: public
server-addr: localhost:8848
dataId: ${spring.application.name}-authority-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: authority
rule-type说明