《SpringCloud Alibaba 微服务架构》专题(十七)-Spring Cloud Alibaba Sentinel之持久化

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规则进行持久化的。

猜你喜欢

转载自blog.csdn.net/BruceLiu_code/article/details/113983070