【Sentinel入门】03 规则类型与对应抛出异常(BlockException、FlowException、ParamFlowException、DegradeException)


系列文章:
【Sentinel入门】01 最简单的例子 helloworld
【Sentinel入门】02 @SentinelResource语法(blockHandler、fallback)
【Sentinel入门】03 规则类型对应抛出异常(BlockException、FlowException、ParamFlowException、DegradeException)
【Sentinel入门】04 springmvc 全局统一限流降级结果返回(BlockExceptionHandler接口)
【Sentinel入门】05 springmvc 集成Sentinel & springboot集成Sentinel & 链路模式失效 & WebContextUnify & CommonFilter

规则类型

在这里插入图片描述
BlockException包含很多个子类,分别对应不同的场景:

	异常                       说明
	FlowException             限流异常
	ParamFlowException        热点参数限流的异常
	DegradeException          降级异常
	AuthorityException        授权规则异常
	SystemBlockException      系统规则异常

blockHandler和blockHandlerClass

  • blockHandlerblockHandlerClass组合可以捕获限流的异常FlowException,FlowException实际上继承了限流异常接口BlockException。

    常见的用法:

声明一个流控管理:

    @SentinelResource(value = "test", blockHandler = "handleException", blockHandlerClass = {ExceptionUtil.class})
    public void test() {
        System.out.println("Test");
    }

回调函数:

	public final class ExceptionUtil {
	
	    //回调函数的入参是BlockException 
	    public static void handleException(BlockException ex) {
	   
	        System.out.println("Oops: " + ex.getClass().getCanonicalName());
	    }
	}

当然,FlowException流控异常只是BlockException异常的一个具体子类,还有其他子类,例如DegradeException、AuthorityException、ParamFlowException

可以创建多个规则,共享一个名称,称为一组。都由同一个声明回调函数处理。如果为了更好的处理这些错误,可以判断具体的异常类型,改造为例如:

	 public static void handleException(BlockException e) {
      if (e instanceof FlowException) {
            msg = "请求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "请求被热点参数限流";
        } else if (e instanceof DegradeException) {
            msg = "请求被降级了";
        } else if (e instanceof AuthorityException) {
            msg = "没有权限访问";
            status = 401;
        }
	      //对msg 做进一步处理,本质上区分具体异常  
	    }
	
  • fallback作用是降级,捕获异常进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值