Springboo整合Sentinel

Springboo整合Sentinel

1.启动Sentinel

java -jar sentinel-dashboard-1.8.6.jar

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

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

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.5.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.0.5.0</version>
        </dependency>

4.编写配置文件

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
server:
  port: 8081

这里的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";
    }
}

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";
    }
}

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

public class MyHandler {

    public static String test01block(BlockException blockException){
        return "自定义限流";
    }

    public static String test01Fallback(Exception e ){
        return "自定义熔断";
    }
}

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

blockHandler处理Sentinel控制台方面配置的异常,fallback处理代码的异常。

相关推荐
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹3 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭4 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫4 小时前
泛型(2)
java
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石4 小时前
12/21java基础
java
李小白665 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp5 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶5 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb