Spring Cloud Alibaba——Sentinel使用Nacos存储规则实现接口限流

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Sentinel作为其核心组件之一,具有熔断与限流等一系列服务保护功能

Sentinel简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel具有如下特性:

  • 丰富的应用场景:承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀,可以实时熔断下游不可用应用;
  • 完备的实时监控:同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况;
  • 广泛的开源生态:提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合;
  • 完善的 SPI 扩展点:提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。

使用Nacos存储限流规则

  1. 准备工作:
    由于下面要同时使用到NacosSentinel Dashboard,所以可以先把NacosSentinel Dashboard启动起来。

  2. 导入相关maven依赖

  
        org.springframework.boot
        spring-boot-starter-parent
        2.2.9.RELEASE
         
    
    
   
        1.8
        2.2.1.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-sentinel
        
        
            com.alibaba.csp
            sentinel-datasource-nacos
            1.5.2
        

        
            org.projectlombok
            lombok
            1.18.2
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.SR1
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.2.2.RELEASE
                pom
                import
            
        
    
  1. application.yml中添加相关配置
server:
  port: 8003

spring:
  application:
    name: alibaba-sentinel-datasource-nacos
  cloud:
    sentinel:
      transport:
        #sentinel dashboard的访问地址,根据上面准备工作中启动的实例配置
        dashboard: localhost:8080
      datasource:
        ds:
          nacos:
            #nacos的访问地址,,根据上面准备工作中启动的实例配置
            server-addr: localhost:8848
            #nacos中存储规则的dataId
            dataId: ${spring.application.name}-sentinel
            #nacos中存储规则的groupId
            groupId: DEFAULT_GROUP
            #该参数是spring cloud alibaba升级到0.2.2之后增加的配置,用来定义存储的规则类型。所有的规则类型可查看枚举
            rule-type: flow

这里对于dataId使用了${spring.application.name}变量,这样可以根据应用名来区分不同的规则配置。

  1. 在主类中创建一个接口
@SpringBootApplication
public class AlibabaSentinelDatasourceNacosApplication {

    public static void main(String[] args) {
        SpringApplication.run(AlibabaSentinelDatasourceNacosApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController{
        @GetMapping("/hello")
        public String hello(){
            return "hello world";
        }
    }

}
  1. 在Nacos控制台中创建限流规则的配置
    Spring Cloud Alibaba——Sentinel使用Nacos存储规则实现接口限流_第1张图片
[
    {
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 5,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]
  • resource:资源名,即限流规则的作用对象
  • limitApp:流控针对的调用来源,若为 default 则不区分调用来源
  • grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
  • count:限流阈值
  • strategy:调用关系限流策略
  • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
  • clusterMode:是否为集群模式
  1. 启动应用,并多次输入访问网址localhost:8003/hello,此时,在Sentinel Dashboard中就可以看到当前我们启动的alibaba-sentinel-datasource-nacos服务。点击左侧菜单中的流控规则,可以看到已经存在一条记录了,具体如下:
    Spring Cloud Alibaba——Sentinel使用Nacos存储规则实现接口限流_第2张图片
    并且如果在某一秒访问该url超过在nacos中配置的次数则会进行限流控制

Spring Cloud Alibaba——Sentinel使用Nacos存储规则实现接口限流_第3张图片

你可能感兴趣的:(Spring,Cloud,Alibaba,sentinel,nacos,限流,cloud,alibaba,Spring)