基于 Nacos 实现 Sentinel 规则持久化
前言
Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在?产环境下不合适。我们可以将Sentinel规则数据持久化到Nacos配置中?,让微服务从Nacos获取规则数据。
构建
依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--sentinel 核心环境 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- Sentinel?持采? Nacos 作为规则配置数据源,引?该适配依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
application.yml中配置Nacos数据源
server:
port: 8100
spring:
profiles:
active: dev
application:
name: nacos-sentinel-8100
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 86614fa3-f528-44e7-95e5-265cc51feb41
group: DEFAULT_GROUP
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8100
datasource:
flow:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: 86614fa3-f528-44e7-95e5-265cc51feb41
data-id: ${spring.application.name}-flow-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
degrade:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: 86614fa3-f528-44e7-95e5-265cc51feb41
data-id: ${spring.application.name}-degrade-rules
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
接口
@RestController
@RequestMapping("/api")
public class Test1Controller {
@GetMapping("/test1")
public String test1(String str) {
return str +"test1 : GetMapping " + LocalDateTime.now();
}
@GetMapping("/test2")
public String test2(String str) {
int i = 1/0;
return str +"test2 : GetMapping " + LocalDateTime.now();
}
@RequestMapping("/test3")
public String test3(String str) {
int i = 1/0;
return str +"test3 : GetMapping " + LocalDateTime.now();
}
}
nacos中添加配置限流和熔断规则
属性配置说明
流量配置
熔断配置
在之前自定义流量限流和熔断限流中可以知道,捕获异常规则时候类是下面这些类。 FlowRule流量控制,DegradeRule熔断规则。
我们重启服务后可以看到/api/test1限流规则 /api/test2熔断规则
注意
1)?个资源可以同时有多个限流规则和降级规则,所以配置集中是?个json数组。
2)Sentinel控制台中修改规则,仅是内存中?效,不会修改Nacos中的配置值,重启后恢复原来的值; Nacos控制台中修改规则,不仅内存中?效,Nacos中持久化规则也?效,重启后规则依然保持。
|