通过Dashboard来为每个Sentinel客户端设置各种各样的规则,但是这里有一个问题,就是这些规则默认时存在内存中的,极不稳定,所以需要将其持久化。我们可以将规则持久化到磁盘文件,也可以持久化到nacos,zookeeper等注册配置中心。
来自官方的介绍:规则管理及推送

根据官方的介绍,不做任何配置的情况下是第一种原始模式,缺点是数据保存在内存中,重启规则就消失了,而官方的推荐的第三种push模式,生产环境下一般使用push模式的数据源,将规则保存到Nacos,Zookeeper等配置中心,而Nacos作为Alibaba。
AHAS Sentinel 控制台提供了一个我们推荐的推送规则的做法,即 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,这样的流程就非常清晰了。

(1)导入依赖
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-sentinel-datasourceartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cspgroupId>
<artifactId>sentinel-datasource-nacosartifactId>
dependency>
(2) 配置yml文件(重点部分 spring.cloud.sentinel.datasource下面的内容)
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
port: 12345 #与控制台交流的端口,可随意指定,不冲突即可。
dashboard: localhost:8080 # sentinel-dashboard的地址
datasource:
# 自定义命名
flow-rule:
# 支持多种持久化数据源:file、nacos、zk、apollo、redis、consul
nacos:
# naco服务地址
server-addr: localhost:8848
# 命名空间,根据环境配置
namespace: public
# 这里我做了一下细分,不同规则设置不同groupId
group-id: SENTINEL_FLOW_GROUP
# 仅支持JSON和XML类型
data-id: ${spring.application.name}-flow-rules.json
# 规则类型:flow、degrade、param-flow、system、authority
rule-type: flow
# nacos开启了认证需要配置username、password
# username: nacos
# password: nacos
注意: 这里的应用名spring.application.name为server-order
(3) 到nacos后台添加配置规则


[{
"clusterMode": false,
"controlBehavior": 0,
"count": 2.0,
"grade": 1,
"limitApp": "default",
"resource": "/hello4",
"strategy": 0
}]
(4) 重启微服务,访问一次刚刚配置的资源名/hello4,因为sentinel使用的懒加载,所以必须请求一次,dashboard才会看到配置的规则。快速频繁,请求可以看到接口被限流。


(5)在sentinel-dashboard控制台查看流控规则

这里是流控规则,参数解析是流控规则。

官方更详细的规则:https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html
sentinel-dashboard 源码: https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard
在第二节,我们实现了从远程配置中心到Sentinel客户端这个过程。之后我们只要实现将从Sentinel Dashboard将规则推送到配置中心即可。
我们通过nacos官方提供的SDK,可以查看到它如何发布配置和获取配置。
当然sentinel-dashboard的源码里也已经提供了获取配置和发布配置的代码,只需要对源码稍作修改,即可实现sentinel-dashboard推送规则到nacos配置中心。

sentinel-dashboard源码,规则保存到内存中。
