Version: Next

Sentinel 规则持久化

问题

一旦重启微服务,在 Sentinel 中配置的各种规则就会消失

解决

  • sentinel-service8401 为例
  • 将限流配置规则持久化进 Nacos 进行保存,只要刷新 8401 某个 REST 地址,Sentinel 控制台的流量规则就能看到
  • 只要 Nacos 里的配置不删除,针对 8401 的 Sentinel 流控规则就持续有效

步骤

POM

  • 引入 sentinel-datasource-nacos 来支持持久化
<!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

application.yaml

  • 添加 datasource 配置
server:
port: 8401
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
#Nacos服务注册中心地址
server-addr: localhost:8848
sentinel:
transport:
#配置Sentin dashboard地址
dashboard: localhost:8080
# 默认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的支持

Nacos 添加配置

  • DataId 与 yaml 文件中的 dataId 一致
  • Group 与 yaml 中的 groupId 一致
  • 配置格式 JSON 与 yaml 中的 data-type 一致
[
{
"resource": "/rateLimit/byUrl", // 资源名称
"limitApp": "default", // 来源应用
"grade": 1, // 阈值类型 0 表示线程数, 1 表示 QPS
"count": 1, // 单机阈值
"strategy": 0, // 流控模式: | 0 直接 | 1 关联 | 2 链路
"controlBehavior": 0, // 流控效果: | 0 快速失败 | 1 预热 | 2 排队等待
"clusterMode": false // 是否为集群
}
]

Sentinel 查看规则

  • 启动 8401
  • 访问 http://localhost:8401/rateLimit/byUrl
  • 刷新 Sentinel 发现了刚才配置的业务规则