Sentinel结合nacos实现规则持久化

自牧 Lv2

一、为什么需要规则持久化?

  • 传统内存模式规则丢失问题
  • 解决方案对比:文件 vs 配置中心
  • 如何选择:Nacos可动态修改配置,且可视化方便

二、环境准备(显式依赖清单)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.6</version>
</dependency>

<!-- Sentinel Spring Cloud Starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2021.0.5.0</version> <!-- 与Spring Boot 2.7.x兼容的版本 -->
</dependency>

<!-- Sentinel Datasource Nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.8.6</version>
<!-- 排除旧版本 -->
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.5.0</version>
</dependency>
<!-- Nacos Client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>

三、Nacos持久化实战

3.1 配置数据源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
spring:
application:
name: example
config:
import:
- bootstrap.yml #springcloud高版本要求使用import
- optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml
cloud:
sentinel:
enabled: true
eager: true
datasource:
# 流量控制规则数据源
flow: #如果没有复杂需求,这样写就能自动跟nacos建立连接并实现持久化
nacos:
server-addr: 127.0.0.1:8848
namespace: f9dc72d2-76ea-43d0-88f9-486111c827c5
dataId: example-sentinel-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
# 熔断降级规则数据源
degrade:
nacos:
server-addr: 127.0.0.1:8848
namespace: f9dc72d2-76ea-43d0-88f9-486111c827c5
dataId: example-sentinel-degrade-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade
# 热点参数规则数据源
param:
nacos:
server-addr: 127.0.0.1:8848
namespace: f9dc72d2-76ea-43d0-88f9-486111c827c5
dataId: example-sentinel-param-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: param-flow
1
2
3
4
5
6
7
8
9
10
spring:
application:
name: example # 与服务名保持一致
cloud:
nacos:
config:
server-addr: localhost:8848
namespace: f9dc72d2-76ea-43d0-88f9-486111c827c5 #命名空间id
file-extension: yaml # 配置文件格式
group: DEFAULT_GROUP

3.2 Nacos控制台配置示例

1
2
3
4
5
6
7
8
9
10
[
{
"resource": "/articles/{id}",
"controlBehavior": 0,
"count": 100,
"grade": 1,
"limitApp": "default",
"strategy": 0
}
]

四、热点参数限流实战

4.1 接口注解配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@GetMapping("/hot")
@SentinelResource(
value = "articleHotSpot",
blockHandler = "handleHotSpotBlock"
)
public String getHotArticle(
@RequestParam("articleId") @SentinelHotSpot("articleId") String id) {
return "热点文章内容";
}

// 降级处理方法
public String handleHotSpotBlock(String id, BlockException ex) {
return "热点文章访问过于频繁,请稍后再试";
}

4.2 动态规则更新

1
2
3
4
5
6
ParamFlowRuleManager.loadRules(Collections.singletonList(
new ParamFlowRule("articleHotSpot")
.setParamIdx(0)
.setCount(50)
.setGrade(1)
));

五、最佳实践总结

  1. 多环境配置隔离策略
  2. 动态规则刷新频率控制

适合读者:

  • 已经掌握Sentinel基础功能的开发者
  • Title: Sentinel结合nacos实现规则持久化
  • Author: 自牧
  • Created at : 2025-04-22 00:00:00
  • Updated at : 2025-04-26 20:17:25
  • Link: https://www.zimucode.top/2025/04/22/Sentinel结合nacos实现规则持久化/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments