1.引言
Sentinel Dashboard
中添加的规则是存储在内存中的,只要服务重启流控规则就丢失了,一旦我们重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化。下面我们就来看看如何持久化sentinel流控规则。
2.sentinel持久化案例
我们先来看看没有配置持久化规则的情况:
启动【springcloudalibaba-sentinel-service8401】服务,浏览器访问:http://localhost:8401/sentinel
在sentinel控制台配置/sentinel
资源对应的流控规则:
然后我们停掉【springcloudalibaba-sentinel-service8401】服务然后再重新启动,回到sentinel控制台观察流控规则是否还存在:
我们发现,当我们重启服务后,sentinel控制台配置的流控规则消失了,可见sentinel控制台配置的流控规则时临时的。
下面我们来看下如何将sentinel流控规则进行持久化。我们需要稍微改造一下模块【springcloudalibaba-sentinel-service8401】
【a】pom.xml加入如下依赖
<!--SpringCloud ailibaba sentinel-datasource-nacos 持久化-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
【b】application.yml:添加sentinel持久化配置
server:
port: 8401
spring:
application:
name: springcloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #指定nacos服务器地址
sentinel:
transport:
dashboard: localhost:8080 #指定sentinel控制台的地址
port: 8719 #sentinel api端口, 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
datasource:
ds1:
nacos:
server-addr: localhost:8848 #指定nacos服务器地址
dataId: ${
spring.application.name}
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
management:
endpoints:
web:
exposure:
include: '*' #配置对外暴露端口
【c】添加nacos业务规则配置
[
{
"resource": "/sentinel",
"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": 是否集群;
【d】重启8401服务
启动完成后浏览器访问:http://localhost:8401/sentinel
然后我们去sentinel控制台看下是否存在刚刚的流控规则:
【e】快速访问业务接口http://localhost:8401/sentinel
【f】停止8401服务
我们停止8401服务,发现sentinel控制台里面的流控规则又没有了。
然后我们重启8401服务, 重新请求几次对应资源接口http://localhost:8401/sentinel,再看sentinel控制台:
我们发现sentinel流控规则又出现了,这样就成功实现了sentinel规则的持久化。
3.总结
本篇文章主要介绍了如何将sentinel
配置的流控规则持久化进nacos
,这样保证每次重启服务后资源对应的流控规则都不会消失,在生产环境中,肯定是要将sentinel
规则进行持久化的。