基于sentinel实现流控和熔断,自定义 限流异常

本文介绍如何使用Sentinel实现API流量控制和熔断机制,包括QPS限制、线程数控制及自定义异常处理等核心功能。通过具体代码示例展示了限流配置与效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流控 : 当QPS >N 时候,当并发线程数>N,则限制不可以调用接口

QPS

QPS每秒查询率(Query Per Second)
  每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

并发线程数

指定的线程5,并发超过6则开启限流

依赖

<!-- 流控熔断降级sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

配置文件

spring:
   #配置sentinel流量熔断降级
    sentinel:
      transport:
        dashboard: localhost:8080 #sentinel地址

登录sentinel 仪表盘,必须先访问接口,可以显示。

在这里插入图片描述

根据按钮 我们先说流控 ,1.qps ,2.线程数 设置固定阀值测试

在这里插入图片描述

设置阀值为1,测试 会出现 by sentinel xxxxxxx 返回语句

熔断:

慢调用 指定1秒内 10次请求 >1000ms(1秒) 比例阀值0.8 (百分之80),

异常比例 指定1秒内 10次请求 >异常比例次数 比例阀值0.8 (百分之80)

异常数:指定1秒内 10次请求>异常数

上述配置 则熔断 直接异常方法

在这里插入图片描述

自定义 限流异常

使用注解 @SentinelResource(value = “list”,blockHandlerClass = ArticleblockHandler.class, blockHandler = “listException”) 第一个参数 限流名称,方便sentinel配置 不能重复,第二参数指定使用限流异常类,第三个参数指定使用限流异常方法名称

/**
 * @Author: 宋忠瑾
 * @Description: 文章控制层
 * @Date: Create in 17:59 2021/7/26
 */
@RestController
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    /**
     * @param
     * @return
     * @Description 获取视频文章
     * @Method
     * @Author 宋忠瑾
     * @Date 2021/7/26 18:19
     */
    @GetMapping("/list")
    @SentinelResource(value = "list",blockHandlerClass = ArticleblockHandler.class, blockHandler = "listException")
    public Result<List<ArticlePageVO>> list() {
        return Result.data(articleService.getArticle());
    }

    /**
     * 测试方法
     * @return
     */
    @GetMapping("/hello")
    @SentinelResource(value = "hello",blockHandlerClass = ArticleblockHandler.class, blockHandler ="helloException")
    public Result<String> hello() {
        return Result.success("hello");
    }
}

限流异常类 必须是static 修饰的静态方法 参数 使用限流接口方法参数一致必须添加参数(BlockException exception),返回类型必须一致

@Slf4j
public class ArticleblockHandler {

    public static Result listException(BlockException exception) {
        log.error("查询文章服务限流异常",exception.getMessage());
        return Result.fail("查询文章服务限流异常");
    }

    public static Result<String> helloException(BlockException exception){
        log.error("查询文章服务限流异常",exception.getMessage());
        return Result.fail("查询hello方法限流异常");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值