现在,sentinel
的所有规则都是内存存储,重启后所有规则都会丢失。在生产环境下,我们必须确保这些规则的持久化,避免丢失。
1.规则管理模式
规则是否能持久化,取决于规则管理模式,sentinel
支持三种规则管理模式:
- 原始模式:
Sentinel
的默认模式,将规则保存在内存,重启服务会丢失。 pull
模式push
模式
1.1.pull
模式
pull
模式:控制台将配置的规则推送到Sentinel
客户端,而客户端会将配置规则保存在本地文件或数据库中。以后会定时去本地文件或数据库中查询,更新本地规则。
1.2.push
模式
push
模式:控制台将配置规则推送到远程配置中心,例如Nacos
。Sentinel
客户端监听Nacos
,获取配置变更的推送消息,完成本地配置更新。
2.实现push
模式
2.1.修改order-service
服务
修改OrderService
,让其监听Nacos
中的sentinel
规则配置。具体步骤如下:
2.1.1.引入依赖
在order-service
中引入sentinel
监听nacos
的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.1.2.配置nacos
地址
在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
2.2.修改sentinel-dashboard
源码
SentinelDashboard
默认不支持nacos
的持久化,需要修改源码。
2.2.1. 下载、解压源码包
从官网中下载的sentinel
源码包:
然后并用IDEA
打开这个项目,结构如下:
2.2.2. 修改nacos
依赖
在sentinel-dashboard
源码的pom
文件中,nacos
的依赖默认的scope
是test
,只能在测试时使用,这里要去除:
将sentinel-datasource-nacos
依赖的scope
去掉:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.2.3. 添加nacos
支持
在sentinel-dashboard
的test
包下,已经编写了对nacos
的支持,我们需要将其拷贝到main
下。
2.2.4. 修改nacos
地址
然后,还需要修改测试代码中的NacosConfig
类,修改其中的nacos
地址,让其读取application.properties
中的配置:
在sentinel-dashboard
的application.properties
中添加nacos
地址配置:
nacos.addr=localhost:8848
2.2.5. 配置nacos
数据源
另外,还需要修改com.alibaba.csp.sentinel.dashboard.controller.v2
包下的FlowControllerV2
类,让我们添加的Nacos
数据源生效:
2.2.6. 修改前端页面
接下来,还要修改前端页面,添加一个支持nacos
的菜单。修改src/main/webapp/resources/app/scripts/directives/sidebar/
目录下的sidebar.html
文件,将其中的这部分注释打开:
修改其中的文本:
2.2.7. 重新编译、打包项目
运行IDEA
中的maven
插件,编译和打包修改好的Sentinel-Dashboard
:
2.2.8.启动
启动方式跟官方一样:
java -jar sentinel-dashboard.jar
如果要修改nacos
地址,需要添加参数:
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar