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是做了持久化的,所以流控规则不会丢失。

目录
相关文章
|
7月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
8月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
2516 2
|
10月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
9月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
842 4
|
9月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
2409 7
|
Dubbo Java 应用服务中间件
深入了解Spring Cloud Alibaba Dubbo
在现代分布式系统开发中,构建高性能、可伸缩性和弹性的微服务架构变得越来越重要。Spring Cloud Alibaba Dubbo(简称Dubbo)是一个开源的分布式服务框架,可以帮助开发者构建强大的微服务架构,具备负载均衡、服务治理、远程调用等强大功能。本文将深入介绍Spring Cloud Alibaba Dubbo,帮助你理解它的核心概念、工作原理以及如何在你的项目中使用它。
|
Kubernetes Java 微服务
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
237 0
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
|
Java 中间件 开发者
Spring Cloud Alibaba
【1月更文挑战第27天】【1月更文挑战第127篇】Spring Cloud Alibaba
240 1
|
消息中间件 Java 持续交付
Spring Cloud Alibaba 项目搭建步骤和注意事项
Spring Cloud Alibaba 项目搭建步骤和注意事项
2099 0
Spring Cloud Alibaba 项目搭建步骤和注意事项
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
764 0

热门文章

最新文章