sentinel自定义限流方法与业务代码解耦合
在学习alibaba 的sentinel ,遇到了一个很小但是容易犯的小错误,记录一下
使用自定义的 限流方法,并且与业务代码解耦合,主业务方法:
// 自定义 解耦限流方法 :指定那个类 下的 哪一个方法 是限流触发后 要执行的方法
@GetMapping("/customerblockHandler")
@SentinelResource( value = "customerblockHandler",blockHandlerClass = CustomerblockHandler.class,blockHandler = "handleException2")
public CommonResult customerblockHandler(){
return new CommonResult(200,"按照自定义限流ok",new Payment(2020L,"serial001"));
}
使用 @SentinelResource 注解,value属性必须唯一,这个是sentinel web系统进行配置限流规则的资源名称。
blockHandlerClass ,这个是要配置 自定义的 限流触发后执行的方法的类,因为要与业务代码解耦,增强代码的复用性和可读性。
所以新建的 一个普通类 CustomerblockHandler,并且 不需要注入,这里使用的是反射机制。
blockHandler ,这个就是自定义触发限流后的方法名称,
重点!!!!!! 自定义的限流的方法 必须是 静态的 :static 并且 要有参数:BlockException
例如:
public class CustomerblockHandler {
public static CommonResult handleException(BlockException exception){
return new CommonResult(4444,"自定义解耦限流处理类 handleException =================== 1");
}
}