Spring Cloud Alibaba @SentinelResource详解

在这里插入图片描述

前言

前面已经介绍了使用Sentinel设置限流与流控规则,这篇文章主要介绍使用@SentinelResource设置熔断;

模拟操作-blockHandler

下面的请求添加了@SentinelResource注解,可以在Sentinel控制台新增流控规则;

如果触发限流的话,则会执行HelloControllerBlockHandler-indexError方法,其中注册参数只有value参数为必填,其他参数均可空;

如果只设置value,限流时则触发限流异常(FlowException);

 @SentinelResource(value = "index", blockHandler = "indexError", blockHandlerClass = HelloControllerBlockHandler.class)
 @ResponseBody
 @GetMapping("index")
 public String index() {
     return "ok";
 }

indexError

public String indexError(BlockException e){
    if(e instanceof FlowException){
        return "当前请求过于火爆,您已被流控!!";
    }
    if(e instanceof DegradeException){
        return "当前请求过于火爆,您已被降级!!";
    }
    if(e instanceof ParamFlowException){
        return "当前请求过于火爆,您已被热点参数限流!!";
    }
    return "服务器快爆了,请稍后再试!!!";
}

blockHandler

  • blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配;
  • 参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException

blockHandlerClass

  • blockHandler 函数默认需要和原方法在同一个类中,如果希望使用其他类的函数的话,则需要指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析;

模拟操作-fallback

当方法出现异常时,会执行异常降级方法:HelloControllerFallback-indexFallback

和限流降级类似,只不过为一个为限流降级,一个为异常降级;

@SentinelResource(value = "index", fallback = "indexFallback", fallbackClass = HelloControllerFallback.class)
@ResponseBody
@GetMapping("index")
public String index() {
    int a = 10 /0;
    return "ok";
}

indexFallback

public static String indexFallback(Throwable throwable) {
    throwable.printStackTrace();
    log.error("异常降级:{}", throwable.getMessage());
    return "fail";
}

模拟操作-defaultFallback

  • 默认处理方案,可选项,通常用于通用的 fallback 逻辑;
  • fallback属性和defaultFallback是指定业务代码中抛出异常的解决办法,优先执行fallback属性;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

素人岳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值