🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
如果没有设置规则持久化,那么某一个微服务重启之后,之前配置的流控规则、降级规则和热点规则等都会消失,又需要重新配置,实在是令人头疼,好在这些规则可以持久化。 <br/> 下面演示流控规则持久化到Nacos上,步骤如下: **1. `pom.xml`** ```xml <!-- 规则持久化 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> ... ``` **2. `application.yml`** ```yml server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 #nacos服务地址 sentinel: transport: dashboard: localhost:8080 #sentinel服务地址 port: 8719 #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口 datasource: #规则持久化配置 ds1: nacos: server-addr: localhost:8848 #nacos服务地址 dataId: ${spring.application.name} #nacos配置文件的名称 groupId: DEFAULT_GROUP data_type: json #持久化为json文件 rule_type: flow ``` **3. 在Nacos上创建对应的配置文件** 该配置会持久化到目录`%NACOS\_HOME%\\data`下。 ![](https://img.kancloud.cn/77/b1/77b10163ad71fbbc3c9a30141d21a71b_1892x494.png) ![](https://img.kancloud.cn/e1/2f/e12fc6129f4df04a4fdf7b3e7cb80361_1636x518.png) 填写的内容如下: ```json [ { "resource": "/flowlimit/testA", "limitApp": "default", "grade": 1, "count": 1, "strategy": 0, "controlBehavior": 0, "clusterMode": false }, { "resource": "/flowlimit/testB", "limitApp": "default", "grade": 1, "count": 1, "strategy": 0, "controlBehavior": 0, "clusterMode": false } ] ``` 参数含义如下: * `resource`:资源名,即限流规则的作用对象 * `count`: 限流阈值 * `grade`: 限流阈值类型(`1`代表QPS 或`0`代表并发线程数) * `limitApp`: 流控针对的调用来源,若为 default 则不区分调用来源 * `strategy`: 调用关系限流策略 * `controlBehavior`: 流量控制效果(直接拒绝、Warm Up、匀速排队) **4. 测试** (1)访问 http://localhost:8401/flowlimit/testA 、http://localhost:8401/flowlimit/testB 后到Sentinel控制台观看确实已经自动配置了流控规则。 ![](https://img.kancloud.cn/8c/6e/8c6e4333c78c7d6362a80a59c03afa7e_1572x254.png) (2)重启项目后再次访问 http://localhost:8401/flowlimit/testA 、http://localhost:8401/flowlimit/testB 流控规则依然存在,说明持久化成功了。 (3)快速访问会发现被限流了,所以流控规则是有效的。 ![](https://img.kancloud.cn/14/10/14105eabba7669b59fa143ea127b5be5_1320x258.png)