所有代码都在github上:https://github.com/demonruin/cloud2020/tree/master
前面我们进行Sentinel的限流熔断等配置的时候,每次重启微服务后,配置都会消失,都需要重新配置,这说明我们的配置并没有持久化,一旦我们重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化,那我们每次重启微服务后,都需要配置一遍Sentinel岂不是很蛋疼~~,所以下面进行演示Sentinel的持久化配置,说是Sentinel的持久化,其实实际上是利用了 nacos的持久化机制,这也就是当初为什么说的 nacos和 Sentinel 基本上不分家,要用都一起用~!~~
我们 将限流配置规则持久化进Nacos保存,只要刷新微服务的某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos里面的配置不删除,针对微服务上sentinel上的流控规则持续有效~~~~
1、针对8401微服务,添加pom依赖
<!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2、添加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: #数据源1
nacos:
server-addr: localhost:8848 #nacos注册中心地址
dataId: cloudalibaba-sentinel-service #定义的配置名称,就是nacos中自定义的那个dateId配置名称
groupId: DEFAULT_GROUP #就是nacos配置中的分组
data-type: json #就是nacos中的格式
rule-type: flow #流控规则
#暴露监控端点
management:
endpoints:
web:
exposure:
include: '*'
3、登录Nacos,在配置管理里面,针对2步骤中的配置进行 新建配置,dataid为2步骤中的dataId,group为2步骤中的groupId,配置格式为2步骤中的data-type,配置内容下面给出详解
配置内容:
[{
"resource": "/testA",
"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:是否集群。
其实就是将Sentinel面板中的流控配置写成json配置配置到nacos中了
4、此时登录查看Sentinel面板中,是没有流控配置的,然后请求接口testA测试后,再查看sentinel面板中,出现了流控配置
此时再关掉8401微服务,然后刷新sentinel面板,发现流控配置没有了,等我们再重新启动8401微服务后,再调用一次testA接口,会发现sentinel面板中的流控规则又出现了,说明我们配置到nacos中的配置管理帮我们实现了流控的持久化!!
至此sentinel的持久化配置完成!!!!
~!!!!但总体来说感觉这个持久化有点鸡肋,sentinel的优势是面板进行配置管理,但是持久化依靠nacos持久化,就需要将面板中的配置写成配置文件形式,然后在配置到nacos中去,这样sentinel面板就失去意义了啊,总感觉像个半成品,纯属个人见解~~