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

相关文章

  • SpringBoot整合Redis使用@Cacheable和RedisTemplate

    SpringBoot整合Redis使用@Cacheable和RedisTemplate

    本文主要介绍了SpringBoot整合Redis使用@Cacheable和RedisTemplate,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java 轻松入门了解File类的使用

    Java 轻松入门了解File类的使用

    Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象
    2022-03-03
  • SpringBoot入门之集成Druid的方法示例

    SpringBoot入门之集成Druid的方法示例

    这篇文章主要介绍了SpringBoot入门之集成Druid的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 使用SpringBoot创建一个RESTful API的详细步骤

    使用SpringBoot创建一个RESTful API的详细步骤

    使用 Java 的 Spring Boot 创建 RESTful API 可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤其适合现代软件开发的需求,帮助你快速构建出高性能的后端服务,需要的朋友可以参考下
    2025-01-01
  • Springboot @WebFilter无法注入其他Bean的示例问题

    Springboot @WebFilter无法注入其他Bean的示例问题

    这篇文章主要介绍了Springboot @WebFilter无法注入其他Bean的示例问题,本文通过示例代码给大家分享解决方法,需要的朋友可以参考下
    2021-09-09
  • JAVA实现线程的三种方法

    JAVA实现线程的三种方法

    这篇文章介绍了JAVA实现线程的三种方法,有需要的朋友可以参考一下
    2013-09-09
  • JMeter 实现Java请求步骤及原理详解

    JMeter 实现Java请求步骤及原理详解

    这篇文章主要介绍了JMeter 实现Java请求步骤及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java实现滑动验证码的示例代码

    Java实现滑动验证码的示例代码

    这篇文章主要为大家介绍了如何用Java语言实现滑动验证码的生成,项目采用了springboot,maven等技术,感兴趣的小伙伴可以跟随小编学习一下
    2022-02-02
  • Spring bean生命周期配置过程解析

    Spring bean生命周期配置过程解析

    这篇文章主要介绍了Spring bean生命周期配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 基于spring注入为null的原因及解决方案

    基于spring注入为null的原因及解决方案

    这篇文章主要介绍了spring注入为null的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论