java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Nacos实现Sentinel规则持久化

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规则持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文