Java中基于Nacos实现Sentinel规则持久化详解

 更新时间:2023年09月12日 10:00:42   作者: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规则持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven中的SnapShot版本和正式版本的区别

    Maven中的SnapShot版本和正式版本的区别

    在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,本文详细的介绍了SnapShot版本和正式版本的区别,感兴趣的可以了解一下
    2021-06-06
  • intellij idea如何将web项目打成war包的实现

    intellij idea如何将web项目打成war包的实现

    这篇文章主要介绍了intellij idea如何将web项目打成war包的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 微信公众号获取access_token的方法实例分析

    微信公众号获取access_token的方法实例分析

    这篇文章主要介绍了微信公众号获取access_token的方法,结合实例形式分析了java实现微信公众号获取access_token的相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-10-10
  • java IP地址网段计算的示例代码

    java IP地址网段计算的示例代码

    这篇文章主要介绍了java IP地址网段计算的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • java dom4j解析xml用到的几个方法

    java dom4j解析xml用到的几个方法

    这篇文章主要介绍了java dom4j解析xml用到的几个方法,有需要的朋友可以参考一下
    2013-12-12
  • 详解java爬虫jsoup解析多空格class数据

    详解java爬虫jsoup解析多空格class数据

    在本篇内容中小编给大家分享了java爬虫jsoup怎么解析多空格class数据的方法和技巧,需要的朋友们跟着学习下。
    2018-12-12
  • 防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下
    2017-09-09
  • java 模仿拼多多红包递减算法的实现

    java 模仿拼多多红包递减算法的实现

    这篇文章主要介绍了java 模仿拼多多红包递减算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Spring boot中使用Spring-data-jpa方便快捷的访问数据库(推荐)

    Spring boot中使用Spring-data-jpa方便快捷的访问数据库(推荐)

    Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。这篇文章主要介绍了Spring-boot中使用Spring-data-jpa方便快捷的访问数据库,需要的朋友可以参考下
    2018-05-05
  • SpringBoot2.动态@Value的实现方式

    SpringBoot2.动态@Value的实现方式

    这篇文章主要介绍了SpringBoot2.动态@Value的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论