Sentinel和Nacos的整合可以实现规则动态配置,即在Nacos中修改规则后,Sentinel能够实时地读取并应用新的规则。而规则持久化则是指将规则保存在Nacos中,以避免意外故障或重启时规则被丢失。
实现规则持久化,可以按照以下步骤进行操作(流控规则为例):
- 📥 导入依赖
<!-- sentinel数据源持久化进nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- bootstrap.yml🧰 配置文件
spring:
application:
name: user-server
cloud:
nacos:
discovery:
server-addr: 192.168.157.129:8848
config:
server-addr: 192.168.157.129:8848
file-extension: yaml
sentinel:
transport:
dashboard: 192.168.157.129:8081
port: 8791
web-context-unify: false
datasource:
# 自定义命名
flow-rule:
# 支持多种持久化数据源:file、nacos、zk、apollo、redis、consul
nacos:
# nacos服务地址
server-addr: 192.168.157.129:8848
# 命名空间,根据环境配置
# namespace: public
# 这里我做了一下细分,不同规则设置不同groupId
group-id: USER_SENTINEL_FLOW_GROUP
# 仅支持JSON和XML类型
data-id: ${spring.application.name}
# 规则类型:flow、degrade、param-flow、system、authority
rule-type: flow
data-type: json
- 🛡️ 编写接口
@GetMapping("/get001")
@SentinelResource(value = "/resource/user/get001")
public Integer get001(@RequestParam("i") Integer i){
return 111;
}
- 在Nacos中创建一个配置文件,用于保存Sentinel规则
📝 创建配置文件
Data ID和Group需要对应
流控规则持久化配置参数:
[
{
"resource": "/resource/user/get001",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
流控规则持久化配置参数说明:
🔧 配置规则
- resource : 资源名称(
@SentinelResource(value = "/resource/user/get001")
) - limitApp : 来源应用
- grade : 0表示线程数,1表示QPS
- count : 单机阈值
- strategy : 流控模式,0直接,1关联,2链路
- controllerBehavior : 流控效果,0快速失败,1Warm Up,2排队等待
- clusterMode : 是否集群
- 重新启动服务,然后访问
/resource/user/get001
资源,刷新一下Sentinel控制台就可以看到我们在Nacos里配置的流控规则了
🚀 重启服务
👀 更新规则
如果在Nacos中更新了规则,Sentinel会自动读取并应用新的规则。同时,也可以从Sentinel Dashboard中查看规则信息。
请注意,Sentinel Nacos适配器要求Nacos版本为1.1.4及以上。在使用之前,请确保您安装的Nacos版本满足要求。