Spring Cloud Alibaba 实操 (九) 持久化Sentinel限流规则

简介: 持久化Sentinel限流规则

1.概述

在前两章节我们学习了通过Sentinel的限流和熔断机制来保护微服务,提高系统的可用性,但是有一个问题,我们在Sentinel配置了限流,熔断策略,默认情况下Sentinel的数据是基于内存存储,当客户端断开,或者Sentinel重启数据就会丢失,这不是我们愿意看到的。所有我们需要的Sentinel做数据持久。 Sentinel 中支持5种持久化的方式:file、redis、nacos、zk和apollo,本片文章针对于Nacos进行持久化配置。

2.使用Nacos存储限流规则

官方文档参考

2.1.导入依赖

以工程springcloudalibaba-user-server-1010为例子,修改pom增加Sentinel和Nacos持久化配置依赖 sentinel-datasource-nacos ,如下:

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <!--Sentinel和Nacos做持久的-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
        <version>1.5.2</version>
     </dependency>
</dependencies>

2.2.配置Sentinel持久化

spring:
  application:
    name: user-server
  cloud:
    nacos:
      config: #配置中心
        server-addr: localhost:8848
        file-extension: yaml
        prefix: application-user
    sentinel:    #限流服务器sentinel配置
      transport:
        dashboard: localhost:1111
      datasource:
        ds:
          nacos: #限流持久配置
            server-addr: localhost:8848    #使用nacos的持久
            dataId: application-user-dev    #获取限流的数据源的dataId
            groupId: DEFAULT_GROUP
            rule-type: flow
  profiles:
    active: dev

这里其实是在之前的配置基础上增加了 spring.cloud.sentinel.datasource持久化数据源的配置,对应了NacosDataSourceProperties 配置类具体含义如下:

  • spring.cloud.sentinel.datasource.ds.nacos.server-addr:nacos的访问地址
  • spring.cloud.sentinel.datasource.ds.nacos.groupId:nacos中存储规则的groupId
  • spring.cloud.sentinel.datasource.ds.nacos.dataId:nacos中存储规则的dataId
  • spring.cloud.sentinel.datasource.ds.nacos.rule-type:该参数是用来定义存储的规则类型。所有的规则类型可查看枚举类:...datasource.RuleType,每种规则的定义格式可以通过各枚举值中定义的规则对象来查看,比如限流规则可查看:...flow.FlowRule

简而言之,这里是配置了Sentinel持久化针对于Nacos的相关信息,程序会去地址为localhost:8848的Nacos中查找DataId为 application-user-dev ,GourpId为 DEFAULT_GROUP的文件作为限流策略(rule-type: flow代表限流)。

2.3.编写测试用的Controller

这个controller我们待会用来做限流测试

 @RestController
   public class TempController {
   
   

      @GetMapping("/hello")
      public String hello() {
   
   
          return "测试数据";
      }
  }

2.4.Nacos中创建限流规则

在配置列表增加配置如下:

[
    {
   
   
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 10,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

image.png

注意:这里的DataId 和 Group其实是和上一步 yml配置中的DataId和Group相对应,这里配置的是一个数组,意思是可以配置多个限流策略,意思如下:

  • resource:对那个资源进行限流
  • limitApp:这个是流控的调用者,default 代表不区分调用者
  • grade:限流方式0是根据并发数量限流,1是表根据QPS来限流
  • count:限流阈值,达到这个阈值就被限流,触发降级。
  • strategy:基于调用链的流控制策略。0 直接,1 关联 2 链路
  • controlBehavior:流控效果,0 直接拒绝,1是Warm Up,2是匀速排队
  • clusterMode:是否为集群

上面的配置项目对应了 com.alibaba.csp.sentinel.slots.block.flow.FlowRule 限流规则类。程序启动,Sentinel通过 NacosDataSource 从Nacos中查找配置。

2.5.测试

启动springcloudalibaba-user-server-1010 ,向 /hello 资源发起访问,然后观察Sentinel控制台流控规则是否有了一条限流策略。
image.png

3.总结一下

这里我们看到,我们并没有在Sentinel设置流控规则,而是通过Nacos配置的流控规则,在客户端对Sentinel做Nacos持久配置,那么Sentinal自动回去同步Nacos中的流控规则,同时同步到客户端本地,因为Nacos是做了持久化的,所以流控规则不会丢失。

目录
相关文章
|
6月前
|
JavaScript 前端开发 Java
垃圾分类管理系统基于 Spring Boot Vue 3 微服务架构实操指南
本文介绍了基于Java技术的垃圾分类管理系统开发方案与实施案例。系统采用前后端分离架构,后端使用Spring Boot框架搭配MySQL数据库,前端可选择Vue.js或Java Swing实现。核心功能模块包括垃圾分类查询、科普教育、回收预约等。文中提供了两个典型应用案例:彭湖花园小区使用的Swing桌面系统和基于Spring Boot+Vue的城市管理系统,分别满足不同场景需求。最新技术方案升级为微服务架构,整合Spring Cloud、Redis、Elasticsearch等技术,并采用Docker容器
390 0
|
5月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
175 2
|
5月前
|
前端开发 Java API
酒店管理系统基于 JavaFX Spring Boot 和 React 经典项目重构实操
本文介绍了基于现代技术栈的酒店管理系统开发方案,整合了JavaFX、Spring Boot和React三大技术框架。系统采用前后端分离架构,JavaFX构建桌面客户端,React开发Web管理界面,Spring Boot提供RESTful API后端服务。核心功能模块包括客房管理和客户预订流程,文中提供了JavaFX实现的客房管理界面代码示例和React开发的预订组件代码,展示了如何实现客房信息展示、添加修改操作以及在线预订功能。
329 1
|
6月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
759 0
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
313 1
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
Java 数据中心 Sentinel
spring boot sentinel 的使用
要实现Spring Boot集成Sentinel的熔断降级,需引入Sentinel依赖并配置Dashboard地址;使用`@SentinelResource`注解定义受保护资源及blockHandler处理降级逻辑;通过Sentinel Dashboard配置熔断规则,如异常比例或响应时间。启动应用后,测试熔断功能,确保Sentinel正常工作。建议动态调整规则以提升系统稳定性。
928 3
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
算法 NoSQL Java
spring cloud的限流算法有哪些?
【8月更文挑战第18天】spring cloud的限流算法有哪些?
369 3
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
1083 0

热门文章

最新文章