使用sentinelResource报com.alibaba.csp.sentinel.slots.block.flow.FlowException: null

问题:在使用@SentinelResource中的blockHandler时,一直报:com.alibaba.csp.sentinel.slots.block.flow.FlowException: null

问题代码:

    @GetMapping("/testZhuJie")
    @SentinelResource(value = "testZhuJie",blockHandler = "failBlockHandler")
    @ResponseBody
    public String testZhuJie(){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    /**blockHandler 函数会在原方法被限流/降级/系统保护的时候调用*****/
    @ResponseBody
    public String failBlockHandler(HttpServletRequest request,BlockException be) {
        return "您访问的太频繁了,请稍后再试!";
    }

原因:

blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

官方文档截图如下:
使用sentinelResource报com.alibaba.csp.sentinel.slots.block.flow.FlowException: null_第1张图片
修改代码:

    @GetMapping("/testZhuJie")
    @SentinelResource(value = "testZhuJie",blockHandler = "failBlockHandler")
    @ResponseBody
    public String testZhuJie(){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
    
    /**blockHandler 函数会在原方法被限流/降级/系统保护的时候调用*****/
    @ResponseBody
    public String failBlockHandler(BlockException be) {
        return "您访问的太频繁了,请稍后再试!";
    }

再次访问测试就可以了:
使用sentinelResource报com.alibaba.csp.sentinel.slots.block.flow.FlowException: null_第2张图片

你可能感兴趣的:(java)