• Sentinel规则持久化到Nacos


    ​​​​​​上文介绍到Sentinel的规则如果需要持久化,就需要采用推或者拉模式

    • 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;
    • 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。

    本文采用Nacos也就是推模式持久化规则,这种方式的交互就切断了Sentinel客户端和 Sentinel Dashboard的联系。它的交互方式是这样:当Sentinel Dashboard有规则变更后,会推送到Nacos,再又Nacos推送给客户端,如下图所示:

    这种方式需要修改两处地方:

    1、修改 Sentinel Dashboard源码(其实Dashboard已经接入了nacos,我们只需要替换一下默认的实现)

    2、Sentinel客户端接入Nacos


    修改 Sentinel Dashboard源码

    1、下载Sentinel Dashboard项目

    https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard

    下载过慢可点这

    2、将test目录下关于Nacos拷贝到com.alibaba.csp.sentinel.dashboard.rule

    其中FlowRuleNacosProvider会从Nacos中拉取规则,FlowRuleNacosPublisher会向Nacos推送规则,这是Dashboard为我们提供的实现

    3、然后替换FlowControllerV2类中DynamicRuleProvider为Nacos的实现

     4、然后前端页面也要改成调用v2的接口,默认是调用/v1/flow

    • sidebar.html(resources/app/scripts/directives/sidebar)页面控规则路由从 dashboard.flowV1 改成 dashboard.flow
    • app.js(resources/dist/js/app.js)将app/scripts/controllers/flow_v1.js
      替换为app/scripts/controllers/flow_v2.js

     Sentinel Dashboard修改完成!!


    Sentinel客户端接入Nacos 

    1、安装启动Nacos

    2、Sentinel 针对 Nacos 作了适配,底层可以采用 Nacos 作为规则配置数据源。使用时只需添加以下依赖:

    1. <dependency>
    2. <groupId>com.alibaba.csp</groupId>
    3. <artifactId>sentinel-datasource-nacos</artifactId>
    4. <version>1.8.0</version>
    5. </dependency>

    完整依赖:

    1. <!-- 依赖web -->
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <!-- sentinel springboot-starter -->
    7. <dependency>
    8. <groupId>com.alibaba.cloud</groupId>
    9. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    10. <version>2021.1</version>
    11. </dependency>
    12. <!-- sentinel 核心依赖-->
    13. <dependency>
    14. <groupId>com.alibaba.csp</groupId>
    15. <artifactId>sentinel-core</artifactId>
    16. <version>1.8.0</version>
    17. </dependency>
    18. <!--sentinel持久化 -->
    19. <dependency>
    20. <groupId>com.alibaba.csp</groupId>
    21. <artifactId>sentinel-datasource-nacos</artifactId>
    22. <version>1.8.0</version>
    23. </dependency>

     Yml配置

    1. server:
    2. port: 8081
    3. spring:
    4. application:
    5. name: sentinel
    6. cloud:
    7. nacos:
    8. discovery:
    9. server-addr: 127.0.0.1:8848
    10. sentinel:
    11. transport:
    12. dashboard: 127.0.0.1:8080 #指定sentinel dashboard web 地址
    13. datasource:
    14. ds1: #名称自定义,唯一
    15. nacos:
    16. server-addr: 127.0.0.1:8848
    17. dataId: ${spring.application.name}-flow-rules
    18. groupId: SENTINEL_GROUP
    19. data-type: json
    20. rule-type: flow

    其中dataId和groupId要和Sentinel Dashboard中FlowRuleNacosPublisher所push的一致,默认值如下,所以我们也设置成默认值即可


    然后依次启动Sentinel Dashboard和Sentinel客户端即可,从Dashboard中修改的规则会立马推送到Nacos,从Nacos添加的规则Dashboard也能感知到,且就算客户端或者Dashboard重启,数据也能从Nacos中读取出来,做到了持久化

  • 相关阅读:
    下载运行ps软件提示因为计算机中丢失d3dcompiler_47.dll解决方法
    Git 详细安装教程(详解 Git 安装过程的每一个步骤
    使用Visual Studio 2022实现透明按钮和标签、POPUP样式窗体的一种工业系统的UI例程
    Golang学习——基于vscode安装go环境
    最详细STM32,cubeMX 超声波测距
    TortoiseSVN 状态图标不显示的两种解决办法
    超越GPT-3,DeepMind推出新宠Gato,却被质疑“换汤不换药”?
    玩转springboot之springboot配置文件
    vue3中组件没有被调用,没进去也没报错
    【web前端面试宝典】经典10问(上篇)
  • 原文地址:https://blog.csdn.net/weixin_43410352/article/details/125414718