Java中基于Nacos实现Sentinel规则持久化详解
作者:tizzybepeacejoy
这篇文章主要介绍了Java中基于Nacos实现Sentinel规则持久化详解,Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在⽣产环境下不合适,我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据,需要的朋友可以参考下
前言
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 + group 隔离环境 namespace: 86614fa3-f528-44e7-95e5-265cc51feb41 group: DEFAULT_GROUP sentinel: transport: dashboard: 127.0.0.1:8080 # sentinel dashboard/console地址 port: 8100 # sentinel会在该端⼝启动http server,那么这样 的话,控制台定义的⼀些限流等规则才能发送传递过来, #如果 8100 端⼝被占⽤,那么会依次+1 datasource: # 此处的flow为⾃定义数据源名 flow: # 流控规则 nacos: server-addr: ${spring.cloud.nacos.discovery.server-addr} # namespace + data-id + group 定位资源配置文件 namespace: 86614fa3-f528-44e7-95e5-265cc51feb41 data-id: ${spring.application.name}-flow-rules groupId: DEFAULT_GROUP data-type: json rule-type: flow # 类型来⾃RuleType类 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 # 类型来⾃RuleType类 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中持久化规则也⽣效,重启后规则依然保持。
到此这篇关于Java中基于Nacos实现Sentinel规则持久化详解的文章就介绍到这了,更多相关Nacos实现Sentinel规则持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!