本文介绍sentinel配置数据的持久化方法。由于sentinel官方并没有提供持久化功能,大家在测试过程中也能发现sentinel服务重启后,原来配置的数据就丢了,本文就是来处理这一问题的。
做好心理准备,我们要修改sentinel的源代码,是不是感觉高大上。
0、环境
- jdk 1.8
- sentinel 1.8.2
- nacos 2.0.3
- mysql 8.0.29
1、sentinel源码下载
点击链接:sentinel源码下载。
2、修改sentinel源代码
下载完成后,解压源代码,找到sentinel-dashboard目录,再用idea(你可以用任何你喜欢的工具)打开,等待maven下载依赖完成。完成后,按以下步骤开始改造:
2.1、修改pom.xml依赖
找到sentinel-datasource-nacos,注释掉test scope,如下代码:
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><!--便于与nacos集成,注释掉test期<scope>test</scope> -->
</dependency>
2.2、复制nacos包
打开sentinel-dashboard项目下的test目录,找到com.alibaba.csp.sentinel.dashboard.rule.nacos包,复制这个包,复制到main目录下,包名和测试目录保持一致。复制完成后,如下图:
2.3、修改NacosConfig
如上图,打开NacosConfig类,找到nacosConfigService(), 按以下代码修改:
@Beanpublic ConfigService nacosConfigService() throws Exception {//添加nacos配置//注意,这里硬编码,你可以用配置文件的方式Properties prop = new Properties();prop.setProperty("serverAddr", "localhost:8848");prop.setProperty("namespace", "dev");return ConfigFactory.createConfigService(prop);}
2.4、修改controller
找到FlowControllerV2类,位于com.alibaba.csp.sentinel.dashboard.controller.v2包下。按如下代码修改:
至此,sentinel后端改造完成。
2. 5、前端页面改造
找到sidebar.html文件,位于**sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/**目录下。加入如下代码:
<li ui-sref-active="active"><a ui-sref="dashboard.flow({app: entry.app})"><i class="glyphicon glyphicon-filter"></i> 流控规则--持久化版</a>
</li>
到这里,sentinel的持久化就改造完成了,注意,只有上面我们刚刚加的那个目录支持。
现在可以打包了,用idea或mvn 命令行都行,打包成功后,在target目录能找到对应的jar文件。
3、微服务改造
从这里开始,改造我们的微服务,按以下步骤来:
3.1、添加依赖
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.0</version>
</dependency>
3.2、添加配置
在application.yml文件中,加入以下配置:
spring:cloud:sentinel:transport:port: 8719dashboard: localhost:8080datasource:my-flow:nacos:# 注意,这里的配置,要和NacosConfig里写的一致server-addr: localhost:8848namespace: dev# 在NacosConfigUtil中定义,这里的配置要和类中保持一致groupId: SENTINEL_GROUPdataId: ${spring.application.name}-flow-rulesrule-type: flow
注意事项我已经写了注释。
4、测试
结合上面的一系列改造,现在终于可以测试了,先跑起来改造后的sentinel-dashboard。关于nacos的配置,请参见我的另一篇博文: nacos环境搭建。
4.1、跑sentinel-dashboard
执行如下命令:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
注意,这里一定是改造后的jar包!浏览器登录后,如下图效果:
下面手动添加一个规则
4.2、添加规则
保存后,再打开nacos ,打开config配置,如下图:
可以看到,刚才配置的限流规则已经同步到nacos里了。OK!