zoukankan      html  css  js  c++  java
  • springcloud之sentinel

    1.sentinel介绍

      随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

    2.sentinel的安装

    2.1 下载sentinel图形化界面的jar包

    2.2 运行命令

    打开cmd执行 java -jar sentinel-dashboard-1.7.2.jar

    2.3 访问dashboard

    在浏览器访问 http://localhost:8080/ ,我们可以看到如下页面

    用户名密码都是sentinel

    3.sentinel初始化监控

    3.1 安装依赖

        <dependencies>
            <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
                <groupId>com.gh.springcloud</groupId>
                <artifactId>cloud-api-commons</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!--SpringCloud ailibaba nacos -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!--SpringCloud ailibaba sentinel-datasource-nacos 后续sentinel做持久化用到-->
            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
            </dependency>
            <!--SpringCloud ailibaba sentinel -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            </dependency>
            <!--openfeign-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <!-- SpringBoot整合Web组件+actuator -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>4.6.3</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
        </dependencies>

    3.2 编写配置文件

    springboot核心配置文件application.yml

    server:
      port: 8401
    
    spring:
      application:
        name: cloudalibaba-sentinel-service
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
        sentinel:
          transport:
            dashboard: localhost:8080 #配置Sentinel dashboard地址
            port: 8719
          datasource:
            ds1:
              nacos:
                server-addr: localhost:8848
                dataId: ${spring.application.name}
                groupId: DEFAULT_GROUP
                data-type: json
                rule-type: flow
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'

    3.3 编写启动类

    @SpringBootApplication
    @EnableDiscoveryClient
    public class MainApp8401 {
        public static void main(String[] args) {
            SpringApplication.run(MainApp8401.class,args);
        }
    }

    3.4 启动项目

    启动项目访问 http://localhost:8080/#/dashboard/home 我们即可看到sentinel已经将服务进行监控

    4.sentinel流控

    4.1 设置限流

    在sentinel控制台流控规则处添加

    4.2 测试

    当1秒内连续点击时就出现如下图所示情况

    5.sentinel降级

    5.1 设置降级

    在sentinel控制台降级规则处添加

    6.sentinel热点key

    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流,热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源生效.

    6.1 编写限流规则

    blockHandler指定的deal_hotKey代表兜底方法

        @GetMapping("testHotKey")
        @SentinelResource(value = "testHotKey",blockHandler = "deal_hotKey")
        public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                                 @RequestParam(value = "p2",required = false) String p2){
            return "test HotKey";
        }
    
        public String deal_hotKey(String p1, String p2, BlockException b){
            return "deal_hotKey o(╥﹏╥)o";
        }

    6.2 配置限流规则

    在sentinel控制台进行配置热点规则

     方法testHotKey里面第一个参数只要QPS超过每秒一次,马上降级处理,就会执行我们自己设置的兜底方法

    需求: 我们期望p1参数当它是某个特殊值时,它的限流值和平时不一样.

    点击编辑进行高级选项设置.

    7.持久化

    7.1 依赖

    引入nacos做持久化所需依赖

            <dependency>
                <groupId>com.alibaba.csp</groupId>
                <artifactId>sentinel-datasource-nacos</artifactId>
            </dependency>

    相关配置信息

    在nacos中进行配置

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

     配置信息:

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    Python基础:Python函数、文件操作、递归
    Python面向对象高级编程:__slot__(给实例添加方法、属性)
    Python fullstack系列【1】:初识Python
    Python fullstack系列【2】Python数据类型
    liunux联网方式配置
    使用 SercureSRT连接linux虚拟机
    高质量代码css部分笔记,未实验
    一段代码
    让图片算好高宽再显示
    你正在成长为一名优秀的程序员吗?
  • 原文地址:https://www.cnblogs.com/fqh2020/p/15101408.html
Copyright © 2011-2022 走看看