Sentinel 兜底方法

时间:2022-10-13 12:07:21

方式一:将兜底方法和控制器请求写在一起

@GetMapping("/fun3")
@SentinelResource(value = "fun3",blockHandler = "fun3Handler")
public String fun3() {
    return "fun3";
}

//兜底方法
public String fun3Handler(BlockException ex){
   //Sentinel提示信息
    String canonicalName = ex.getClass().getCanonicalName();
    return "兜底:fun3Handler "+canonicalName+" 服务不可用!";
}

在Sentinel中配置限流规则:

注意:使用资源流限流,不要使用url限流。因为URL限流只会调用默认的方法,只有资源名限流,自定义兜底方法才能起作用。

Sentinel 兜底方法Sentinel 兜底方法 高频访问fun3结果: Sentinel 兜底方法

方法二:将兜底方法写到单独的类中

  • 兜底方法
public class MyBlockHandler {
    public static String handlerException(BlockException ex) {
        return "自定义全局的:BlockHandler";
    }
}
  • 控制器请求方法
@GetMapping("/fun4")
@SentinelResource(value = "fun4",blockHandlerClass = MyBlockHandler.class,blockHandler = "handlerException")
public String fun4() {
    return "fun4";
}

建议限流无则+测试,同方法一