项目中有用到Sentinel,然后需要将Sentinel上配置的规则做持久化(或者初始化),通过改写Sentinel源码实现了需求,下面记录一下实现过程。
如果不知道Sentinel怎么搭,可以看看: 流控平台Sentinel搭建和接入教程_东皋长歌的博客-CSDN博客
一,背景
Sentinel是Alibaba开源的一款特别实用的流控平台,属于那种部署就能用的轻量级平台,不过正因为轻量,导致它不会对你设置的流控规则做持久化。什么意思呢?就是说如果你的Sentinel因为一些原因,比如服务器断电,或者服务器崩溃了,你配置的规则就没了(它们是存储在服务器本地内存的)。如果配置的少或者系统对限流不怎么依赖的话还好说,如果是一个大规模在线系统,配置的规则又很多的话,那就不好说了,估计有些人又得被祭天了(哭唧唧)。
不要慌!
下面就给大家讲怎么做持久化。
二,修改源码
1,下载源码
在Github上搜索,Sentinel,选择alibaba的
GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)https://github.com/alibaba/Sentinel下载源码到本地,解压,打开sentinel-dashboard项目
2,修改Nacos依赖的配置
在sentinel-dashboard源码的pom文件中,nacos的依赖默认的scope是test,只能在测试时使用,这里要去除:
3,添加nacos的支持
实际上代码已经在test下面了,直接拷贝过来就可以
4,修改Nacos里的配置地址
在NacosConfig类里加上@ConfigurationProperties(prefix="nacos") 和成员变量addr
这一步是用来定义nacos的地址,以便于可以讲规则持久化到nacos里去
在sentinel-dashboard项目的application.properties里加上一行配置
nacos.addr=nacos部署的服务器IP:8848
5,修改数据源读取的类,使配置生效
修改com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类:改成如下图中的(就是把Defaule改成Nacos)
6, 修改前端页面展示
如下图,先将之前注释的打开,然后把里面的文字改成你自己想要的。
注意: 从这个入口进去的才会持久化。
7,重新编译打包
到整个项目的上层,使用 mvn clean package -Dmaven.test.skip=true 打包
三,重新部署
使用上面的项目sentinel-dashboard文件夹里target目录下的新包,上传到服务器,再启动
nohup java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -Dnacos.addr=nacos服务器IP:8848 -jar sentinel-dashboard.jar > nohup.out 2>&1 &
echo "sentinel dashboard start success"
四,配置流控规则
1,从新的入口,配置流控规则
2,到nacos上检查
nacos上有你在sentinel上定义的规则,持久化成功
3, 重启sentinel
会从nacos读取配置,初始化到Sentinel的规则里面来
至于Sentinel流控规则的高级玩法,请看下集,敬请期待!
码字不易,记得点赞关注哟!