sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用

@SentinelResource属性介绍

  • Value:资源名称,必需项(不能为空)
  • blockHandler:处理BlockException的函数名称(可以理解对Sentinel的配置进行方法兜底)。函数要求:
    • 必须是public修饰
    • 返回类型与原方法一致
    • 参数类型需要和原方法相匹配,并在最后加BlockException类型的参数
    • 默认需和原方法在同一个类中,若希望使用其他类的函数,可配置blockHandlerClass,并指定blockHandlerClass里面的方法。
  • blockHandlerClass:存放blockHandler的类。对应的处理函数必须是public static修饰,否则无法解析,其他要求:同blockerHandler。
  • fallback:用于在抛出异常的时候提供fallback处理逻辑(可以理解为对java异常情况方法兜底)。fallback函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。函数要求:
    • 返回类型与原方法一致
    • 参数类型需要和原方法相匹配,Sentinel 1.6开始,也可以在方法最后加Throwable类型的参数
    • 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置fallbackClass,并制定fallbackClass里面的方法。
  • fallbackClass:存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。

项目构建用以下的项目
https://blog.csdn.net/qq_41712271/article/details/117596349?spm=1001.2014.3001.5501

1 写测试方法

@RestController
public class Controller_3 {
    @SentinelResource(value = "getProduct", blockHandler = "getProduct_jiangji",fallback = "getProduct_byFallback")
    @RequestMapping("/getProduct")
    public String getProduct(@RequestParam(name = "type", required = false) String type,
                             @RequestParam(name = "name", required = false) String name) {
        //模拟报错
        //System.out.println(1 / 0);
        return type + " " + name;
    }

    public String getProduct_jiangji(String type, String name, BlockException be) {
        System.out.println(be.getMessage());
        return "Sentinel 流控降级热点时调用的方法";
    }

    public String getProduct_byFallback(@RequestParam(name = "type", required = false) String type,
                                        @RequestParam(name = "name", required = false) String name) {
        return "java代码运行时产生的异常(如空指针异常,运算异常等 调用的方法,没有异常时该怎么运行,怎么运行 "+type+" "+name;
    }
}

2 在sentinel控制台定义限流,降级,热点等规则,如这里用热点
sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用_第1张图片

3 用jmeter开始压测
sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用_第2张图片
a 当没达到限流规则时,且不报错,如下图,如果没达到限流的规则,且报错,就走getProduct_byFallback的方法

sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用_第3张图片

b 当达到限流的规则时,如下图
sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用_第4张图片

你可能感兴趣的:(#,SpringCloud,spring,cloud,sentinel)