SpringCloud学习笔记—- SpringCloud Alibaba Sentinel 设置主动限流 和 自定义兜底方法的几种方式

简介

当前文章 演示几种主动限流的配置和自定义兜底方法的配置 当前环境已经完成了nacos注册中心的整合 sentinel控制台的整合 具体整合配置 可以看我以前的文章
复制代码

主动限流

sentinel控制台根据资源名限流

image.png

/**
 *  @SentinelResource注解所对应的
 *  value 属性的值 必须跟配置的热点规则的资源名一致
 *  blockHandler 属性配置的是当前的兜底方法
 * @param username
 * @return
 */
@GetMapping("/testE")
@SentinelResource(value = "testE",blockHandler = "dealTestE")
public String testE(String username){
    return "E方法的调用";
}

//兜底方法  只要请求这个接口 带有参数 并且10秒内 请求超过两次 就会执行兜底方法 也就是所谓的限流逻辑
public String dealTestE(String username,BlockException blockException){
    return "------------运行兜底方法--------------";
}
复制代码

sentinel控制台配置根据请求资源路径限流

image.png

/**
 * 当前流控规则  根据自己定义的请求资源路径 匹配 如果一秒内超过设定的阈值 就会触发默认兜底方法
 * @param username
 * @return
 */
@GetMapping("/user/login")
@SentinelResource(value = "login")
public String login(String username){
    return "url限流测试";
}
复制代码

image.png

自定义兜底方法

配置单个兜底方法【除啦单个兜底方法 还可以配置 兜底放在所在类和共同的兜底方法】


//降级和熔断 用 fallback
@GetMapping("/user/login")
@SentinelResource(value = "login",fallback = "deal_login")
public String login(String username){
    return "url限流测试";
}

//兜底方法
public String deal_login (String username){
    return "------成功执行url限流";
}




//限流和阻塞  blockHandler
@GetMapping("/testE")
@SentinelResource(value = "testE",blockHandler = "dealTestE")
public String testE(String username){
    return "E方法的调用";
}

//兜底方法
public String dealTestE(String username,BlockException blockException){
    return "------------运行兜底方法--------------";
}
复制代码

配置兜底方法 所在的类和 兜底方法

/**
 * 配置当前兜底方法 坐在的类 和类中方法的名称 兜底类中的方法 必须用 static 修饰
 * 限流兜底方法的   BlockException blockException 必须要有
 * @return
 */
@GetMapping("/user/register")
@SentinelResource(value = "register",fallbackClass = FalbakcHandler.class,fallback = "dealRegister",
        blockHandlerClass = BlockHandler.class,blockHandler = "dealRegister")
public String dealRegister(){
    return "运行成功";
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享