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处理代码的异常。

相关推荐
飞翔的佩奇2 分钟前
xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。
数据库·spring boot·mysql·sqlite·xxl-job·任务调度
懒洋洋大魔王8 分钟前
7.Java高级编程 多线程
java·开发语言·jvm
茶馆大橘12 分钟前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
星辰@Sea16 分钟前
服务注册中心对比及使用场景分析
java·云原生
马剑威(威哥爱编程)20 分钟前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
bug菌¹22 分钟前
滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
java·spring cloud·微服务
bug菌¹25 分钟前
滚雪球学SpringCloud[4.2讲]: Zuul:Netflix API Gateway详解
spring·spring cloud·gateway
MuseLss42 分钟前
HashMap高频面试知识点
java·开发语言·哈希算法
tyler-泰勒44 分钟前
初始c++:入门基础(完结)
java·开发语言·c++
重生之我要进大厂1 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode