文章目录
- 1、Sentinel源码修改
- 2、持久化效果测试
Sentinel规则管理有三种模式:
- 原始模式
- pull模式
- push模式
这是实现push方式:
push模式即控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端去监听Nacos,获取配置变更的推送消息后完成本地配置更新。
但SentinelDashboard默认不支持nacos的持久化,需要修改源码,(不想花钱)下面开整:
1、Sentinel源码修改
- 下载Sentinel的源码包
# github地址,版本自选
https://github.com/alibaba/Sentinel/tags
- 解压后用IDEA打开项目
- 修改sentinel-dashboard模块源码的pom文件,将sentinel-datasource-nacos依赖的scope注释掉(nacos的依赖默认的scope是test,只能在测试时使用,这里要去除)
- 拷贝test目录下的nacos代码到main下的com.alibaba.csp.sentinel.dashboard.rule包(在sentinel-dashboard的test包下,已经编写了对nacos的支持)
- 修改刚刚拷贝的nacos包下的NacosConfig类,修改其中的nacos地址,让其读取application.properties中的配置:(圈起来的都是新增的)
- 在sentinel-dashboard的application.properties中添加nacos地址配置:
nacos.addr=localhost:8848
- 修改 com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类,让我们添加的Nacos数据源生效:
- 修改src/main/webapp/resources/app/scripts/directives/sidebar/目录下的sidebar.html文件:
- 将sidebar.html文件其中的这部分注释打开,改个自己的文本(添加一个支持nacos的菜单):
- 运行IDEA中的maven插件,重新编译和打包修改好的Sentinel-Dashboard:
- 打包成功
- 启动方式跟官方一样:
java -jar sentinel-dashboard.jar
- 如果nacos地址不是localhost,修改需要添加参数:
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar
2、持久化效果测试
改装完成,接下来修改自己的微服务order-service,使其监听Nacos配置中心
- 在order-service中引入sentinel监听nacos的依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</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中添加限流规则
- 可以看到限流功能首先是正常的
- 再查看Nacos配置,可以看到限流规则已被持久化进来
- 再次重启自己的微服务order-service,可以看到nacos中的限流规则依然在,发起请求,依然会被限流,不再因为服务重启而丢失限流规则了。
修改成功!!!!