• Springboo整合Sentinel


    Springboo整合Sentinel

    1.启动Sentinel

    java -jar sentinel-dashboard-1.8.6.jar
    
    • 1

    2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel)

    在这里插入图片描述

    3.引入依赖(注意版本对应)

            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2021.0.5.0
            
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-sentinel
                2021.0.5.0
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.编写配置文件

    spring:
      cloud:
        sentinel:
          transport:
            dashboard: localhost:8080
            port: 8719
    server:
      port: 8081
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里的spring.cloud.sentinel.transport.port端口配置会在应用对应的服务器上启动一个Http Server,该Server会与Sentinel控制台交互。比如Sentinel控制台添加了一个限流规则,会把规则数据push给这个Http Server接收,Http Server再将规则注册到Sentinel中。

    5.编写controller,启动项目

    @RestController
    public class MyController {
    
        @GetMapping("/test01")
        public String test01(){
            return "hello sentinel";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Sentinel采用懒加载机制,这时Sentinel控制台中并没有该服务信息,先访问接口,才会在Sentinel控制台中显示。
    在这里插入图片描述

    Sentinel基本限流规则

    1.流控规则

    在这里插入图片描述
    解释说明:
    资源名:唯一名称,默认请求路径
    针对来源:Sentinel可以针对调用者进行限流,填写微服务名称(需要将服务注册到服务中心),默认default(不区分来源)
    阈值类型/单机阈值:
    - QPS(每秒的请求数量):当调用api的QPS达到阈值的时候,进行限流。
    - 线程数:当调用该api的线程数达到阈值的时候,进行限流
    是否集群:不需要集群
    流控模式:
    - 直接:api达到限流条件时,直接限流
    - 关联:当关联的资源达到阈值时,就限流自己
    - 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
    流控效果:
    - 快速失败:直接失败,抛异常
    - Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值
    - 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置QPS,否则无效

    2.降级规则

    1.慢调用比例

    在这里插入图片描述
    慢调用比例:选择以慢调用比例作为阈值,需要设置慢调用比例作为阈值,需要设置允许的慢调用RT(即最大响应时间),响应时间大于该值则统计为慢调用。当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后的熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求响应时间小于设置的慢调用RT,则结束熔断,若大于设置的慢调用RT,则会再次被熔断。

    2.异常比例

    在这里插入图片描述
    异常比例:当单位统计时长内请求数目大于设置的最小请求数目,并且异常数比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后,熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求成功完成(没有错误)。则结束熔断,否则会再次被熔断。

    3.异常数

    在这里插入图片描述
    异常数:当单位统计时长内的异常数目超过阈值后会自动熔断,经过熔断时长后,熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求成功完成(没有错误)。则结束熔断,否则会再次被熔断。

    热点key限流

    何为热点?热点即为经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的Top K数据,并对其访问进行限制。
    比如:

    • 商品id为参数,统计一段时间内最常购买的商品id并进行限制
    • 用户id为参数,针对一段时间内频繁访问的用户id进行限制

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

    在这里插入图片描述

    1.使用@SentinelResource实现自定义限流与熔断

    controller代码

    @RestController
    public class MyController {
    
        @GetMapping("/test01")
        @SentinelResource(value = "test01",blockHandlerClass = MyHandler.class,blockHandler = "test01block",fallbackClass = MyHandler.class,fallback = "test01Fallback")
        public String test01(@RequestParam String uid){
            return "hello sentinel";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    handler代码(注意:自定义处理类中的限流与熔断方法必须是public static)

    public class MyHandler {
    
        public static String test01block(BlockException blockException){
            return "自定义限流";
        }
    
        public static String test01Fallback(Exception e ){
            return "自定义熔断";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    添加配置(资源名要与 @SentinelResource的value相同)

    在这里插入图片描述
    blockHandler处理Sentinel控制台方面配置的异常,fallback处理代码的异常。

  • 相关阅读:
    2022年最值得阅读的强化学习书籍
    c++智能指针(raii)
    每日杂学:页面加载出现白页
    简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
    图文详解Linux基础经典教程(06)——CentOS安装JDK
    辉芒微(FMD)单片机开发环境搭建
    【计算机网络实验】虚拟局域网VLAN配置实验
    SpringBoot集成SpringSecurity从0到1搭建权限管理详细过程(认证+授权)
    【C语言】你真的懂常量吗?二进制的条条框框你还记得吗?(每日小细节002)
    使用scales包自定义ggplot2坐标轴刻度和标签
  • 原文地址:https://blog.csdn.net/qq_64403619/article/details/133365768