Sentinel规则持久化到nacos的实现(源码修改)

文章目录

  • 1、Sentinel源码修改
  • 2、持久化效果测试

Sentinel规则管理有三种模式:

  • 原始模式
  • pull模式
  • push模式

这是实现push方式:

Sentinel规则持久化到nacos的实现(源码修改)_第1张图片

push模式即控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端去监听Nacos,获取配置变更的推送消息后完成本地配置更新。

但SentinelDashboard默认不支持nacos的持久化,需要修改源码,(不想花钱)下面开整:

1、Sentinel源码修改

  • 下载Sentinel的源码包
# github地址,版本自选
https://github.com/alibaba/Sentinel/tags

Sentinel规则持久化到nacos的实现(源码修改)_第2张图片

  • 解压后用IDEA打开项目

Sentinel规则持久化到nacos的实现(源码修改)_第3张图片

  • 修改sentinel-dashboard模块源码的pom文件,将sentinel-datasource-nacos依赖的scope注释掉(nacos的依赖默认的scope是test,只能在测试时使用,这里要去除)

Sentinel规则持久化到nacos的实现(源码修改)_第4张图片

  • 拷贝test目录下的nacos代码到main下的com.alibaba.csp.sentinel.dashboard.rule包(在sentinel-dashboard的test包下,已经编写了对nacos的支持)

Sentinel规则持久化到nacos的实现(源码修改)_第5张图片

  • 修改刚刚拷贝的nacos包下的NacosConfig类,修改其中的nacos地址,让其读取application.properties中的配置:(圈起来的都是新增的)

Sentinel规则持久化到nacos的实现(源码修改)_第6张图片

  • 在sentinel-dashboard的application.properties中添加nacos地址配置:
nacos.addr=localhost:8848
  • 修改 com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类,让我们添加的Nacos数据源生效:

Sentinel规则持久化到nacos的实现(源码修改)_第7张图片
Sentinel规则持久化到nacos的实现(源码修改)_第8张图片

  • 修改src/main/webapp/resources/app/scripts/directives/sidebar/目录下的sidebar.html文件:

Sentinel规则持久化到nacos的实现(源码修改)_第9张图片

  • 将sidebar.html文件其中的这部分注释打开,改个自己的文本(添加一个支持nacos的菜单):

Sentinel规则持久化到nacos的实现(源码修改)_第10张图片

  • 运行IDEA中的maven插件,重新编译和打包修改好的Sentinel-Dashboard:

Sentinel规则持久化到nacos的实现(源码修改)_第11张图片

  • 打包成功

Sentinel规则持久化到nacos的实现(源码修改)_第12张图片

  • 启动方式跟官方一样:
java -jar sentinel-dashboard.jar

Sentinel规则持久化到nacos的实现(源码修改)_第13张图片

  • 如果nacos地址不是localhost,修改需要添加参数:
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar

2、持久化效果测试

改装完成,接下来修改自己的微服务order-service,使其监听Nacos配置中心

  • 在order-service中引入sentinel监听nacos的依赖
<dependency>
    <groupId>com.alibaba.cspgroupId>
    <artifactId>sentinel-datasource-nacosartifactId>
dependency>
  • 在order-service中的application.yml文件配置nacos地址及监听的配置信息:
spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow
        #如果还有其他类型的限流,下面继续和flow同级写
        degrade:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
  • 重启自己的微服务,请求个接口后在自己新加的侧边栏流控规则-NACOS中添加限流规则

Sentinel规则持久化到nacos的实现(源码修改)_第14张图片

  • 可以看到限流功能首先是正常的

Sentinel规则持久化到nacos的实现(源码修改)_第15张图片

  • 再查看Nacos配置,可以看到限流规则已被持久化进来

Sentinel规则持久化到nacos的实现(源码修改)_第16张图片

  • 再次重启自己的微服务order-service,可以看到nacos中的限流规则依然在,发起请求,依然会被限流,不再因为服务重启而丢失限流规则了。

Sentinel规则持久化到nacos的实现(源码修改)_第17张图片

修改成功!!!!

你可能感兴趣的:(SpringCloud,sentinel,规则持久化,源码修改)