[此方案不推荐,代码太冗余] sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用

项目整合Sentinel,看以下博文
springCloud 整合 sentinel最基本入门Demo-1,接入到sintinel web控制台,并以控制台方式配置限流规则,以注解的方式定义资源_springcloud sentinel 集成demo 例子_小哇666的博客-CSDN博客


@SentinelResource属性介绍

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

项目构建用以下的项目
springCloud 整合 sentinel最基本入门Demo-1,接入到sintinel web控制台,并以控制台方式配置限流规则,以注解的方式定义资源_springcloud sentinel 集成demo 例子_小哇666的博客-CSDN博客

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;
    }

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

    //java里,自己写的程序出错走这个方法
    public String getProduct_byFallback(@RequestParam(name = "type", required = false) String type,
                                        @RequestParam(name = "name", required = false) String name,
                                        Throwable ee) {
        return "java代码运行时产生的异常(如空指针异常,运算异常等 调用的方法,没有异常时该怎么运行,怎么运行 "+type+" "+name+"--异常信息:"+ee.getMessage();
    }
}

2 在sentinel控制台定义限流,降级,热点等规则,如这里用热点


3 用jmeter开始压测

a 当没达到限流规则时,且不报错,如下图,如果没达到限流的规则,且报错,就走getProduct_byFallback的方法



b 当达到限流的规则时,如下图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值