在入门 Sentinel 流控的时候,每次重启 Sentinel 服务端或者客户端,在服务端配置的流控的规则都消失了,感觉每次的重启都会重置。
原来默认的情况下,不论是服务端中的配置还是客户端中的配置,都是在内存中存储,一点重启,这些配置过的规则都消失了。
于是,脑海中便浮现出「持久化」这个词,随后了解了Sentinel 有多种方式实现持久化,一种是可通过注册中心,如Nacos实现配置持久化,下面简单实现 Sentinel 的 Nacos持久化。
一、Nacos配置中心
Nacos的配置中心的使用参考:Springboot集成Nacos2「配置中心」。
新增配置中心文件 sentinel-service.json ,选择默认命名空间 public
[
{
"resource": "test/12",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
resource:资源名,即限流规则的作用对象 limitApp:流控针对的调用来源,若为 default 则不区分调用来源 grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制 count:限流阈值 strategy:调用关系限流策略 controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队) clusterMode:是否为集群模式
二、Sentinel 客户端
开发环境
- Spring Boot : 2.1.12.RELEASE
- Spring Cloud :Greenwich.SR5
- Spring Cloud Alibaba : 2.1.2.RELEASE
1. 引入POM依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2. application.yml 配置
server:
port: 8002
servlet:
context-path: /springboot-sentinel-client-b
spring:
application:
name: springboot-sentinel-client-b
cloud:
sentinel:
transport:
dashboard: localhost:8080
eager: true
#将sentinel配置信息持久化到nacos
datasource:
ds:
nacos:
server-addr: localhost:8848
data_id: sentinel-service.json
group-id: DEFAULT_GROUP
data-type: json
rule-type: flow
启动后,访问:http://localhost:8080/#/dashboard/flow/springboot-sentinel-client-b
3. 注意事项
- 如果 Sentinel 控制台配置了规则或修改了参数,不会同步到Nacos。
- Nacos里需要修改了值,会立马同步到 Sentinel 里。
- 如果有自定义的加载,则不会从Nacos里加载策略信息。
springboot集成Sentinel DEMO: gitee.com/renxiaoshi/…