spring cloud alibaba集成sentinel

1、安装依赖

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

2、配置文件

spring:
  application:
    name: nacos80833
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 127.0.0.1:9090

3、常用规则
常用名词:
(1)资源名:资源名称,也就是请求路径或者映射
(2)针对来源:对调用者进行限流
(3)阈值类型:QPS:每秒可处理的请求数;线程数:能使用的线程数
(4)流控模式:直接-到达条件后直接执行某个流控效果;关联:如果关联资源达到条件则限流自身;
(5)流控效果:快速失败-到达条件后直接返回失败结果;Warm Up-预热,到达到阈值后,进入规定时间的预热状态,预热阈值默认为3,过了预热时间后,阈值恢复到设定阈值;排队等待-到达阈值条件后,系统均匀排队,过了超时时间则返回失败
3.1 流控规则:针对资源的
QPS:每秒可处理的请求数
1)QPS-直接-快速失败:请求数达到阈值后直接返回失败信息
在这里插入图片描述
2)QPS-直接-Warm Up:到达到阈值后,进入规定时间的预热状态,预热阈值默认为3,过了预热时间后,阈值恢复到设定阈值
在这里插入图片描述
3)QPS-直接-排队等待: 到达阈值后,所有请求进行排队等待均匀通过,到到达超时时间后则返回失败。
在这里插入图片描述
4)QPS-关联-快速失败: 设定的规则对BB起作用,当请求bb到达阈值后,则AA也会被限制
在这里插入图片描述
5)线程数-直接:当线程数达到阈值后则进行失败操作
3.2 降级熔断:针对资源的,到达条件后,服务器停止运行一段时间,之后在启动,即让服务器歇一会儿。规则有3种:RT(平均响应时间),异常比例,异常数
在这里插入图片描述
3.3 系统规则:LOAD负载,RT,线程数,入口QPS,CPU使用率。
4、使用@SentinelResource注解
其中value表示资源别名;blockHandler表示到达限流条件后的处理函数(注意:参数和原函数一致,外加BlockException blockException异常);fallback代表出现异常后执行的函数(注意:参数和原函数一致);blockHandlerClass代表限制兜底所在的类;fallbackClass代表异常所在的类;exceptionsToIgnore代表忽略哪些异常。
4.1 新建BlockHandler类,放超过限制条件的处理函数

public class BlockHandler {
    public static String sentinelUnionTestBlockHandler(BlockException blockException){
        return "限流兜底";
    }
}
4.2 新建ExceptionHandler类,放出现异常的处理兜底函数
public class ExceptionHandler {
    public static String sentinelUnionTestFallback(){
        return "业务异常";
    }
}

4.3 控制器执行函数
@GetMapping("/sentinelUnionTest")
    //@SentinelResource(value = "sentinelUnionTest",fallback = "sentinelUnionTestFallback",blockHandler = "sentinelUnionTestBlockHandler")
    @SentinelResource(value = "sentinelUnionTest",fallbackClass = ExceptionHandler.class,fallback = "sentinelUnionTestFallback",blockHandlerClass = BlockHandler.class,blockHandler = "sentinelUnionTestBlockHandler")
    public String sentinelUnionTest(){
        int res=1/0;
        return "OK";
    }
4.4 或者写在同一个类内部(不推荐)
@GetMapping("/testHotKeyA")
    @SentinelResource(value = "testHotKeyA",blockHandler = "blockTestHotKeyA")
    public String testHotKeyA(@RequestParam("orderId") String orderId,@RequestParam("userId") String userId){
        //热点规则测试代码
        return "testHotKeyA";
    }

    public String blockTestHotKeyA(String orderId,String userId,BlockException blockException){
        return "参数限流"+blockException.getMessage();
    }

    /**
     * 业务异常测试
     * @param params
     * @return
     */
    @GetMapping("/fallbackTest")
    @SentinelResource(value = "fallbackTest",fallback = "fallbackTestHandler")
    public String fallbackTest(String params){
        int res=1/0;
        return "fallback测试成功!";
    }

    public String fallbackTestHandler(String params){
        //业务异常
        return "业务异常";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值