想要实现Sentinel持久化,首先我们得思考为什么需要持久化?通俗来说就是:每次服务启动,都得重新去Sentinel dashboard中配置Sentinel的各种规则。例如流量规则、热点规则、熔断规则、授权规则。当服务数量众多时,一旦服务重新启动,所有规则都被清空,需要重新为每一个服务都重新配置这些,会非常麻烦。所以,Sentinel需要持久化,但前提是已经实现了Nacos的持久化,因为Sentinel的持久化需要整合Nacos才能实现。通俗来讲:Sentinel需要在Nacos的配置中心里配置,而Nacos中的配置已经实现持久化操作。use embedded storage,则代表内部嵌入式存储, 这通常指的是使用内置的Derby数据库。use external storage,则代表使用外部存储,通常指的是Mysql数据库。所以,Sentinel的规则也能够实现持久化。
第一步:pom中导依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
第二步:yml中编写配置
sentinel:
transport:
dashboard: localhost:8080
#Sentinel默认是懒加载机制,只有我们访问了请求,控制台才会显示出应用的信息。
eager: true # ea设置为true,可以让项目一启动,自动连上Sentinel board。
web-context-unify: false # Controller层的方法对Service层调用不认为是同一个根链路
datasource:
ds1:
nacos:
server-addr: localhost:8848
# 微服务名称
dataId: ${spring.application.name}
# 分组
groupId: DEFAULT_GROUP
data-type: json
# rule-type: degrade 熔断
# rule-type: Authority 访问控制
# rule-type: System 系统保护
# rule-type: param-flow 热点
rule-type: flow
第三步:在Nacos配置中心里编写配置
[
{
"resource": "/asd",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
resource:资源名称;(url请求:例如:"/api/order/asd");
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接,1表示关联,2表示链路;
controlBehavior:流控效果,0表示快速失败,1表示WarmUp,2表示排队等待clusterMode:是否集群。