栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloudAlibaba - @SentinelResource注解的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloudAlibaba - @SentinelResource注解的使用

目录
  • 前言
  • 具体使用
    • 简单示例
    • blockHandlerClass 单独配置
    • 注解属性

前言

@SentinelResource用于定义Sentinel资源


具体使用 简单示例
  • SentinelResourceController.java
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/sentinel_resource")
@Slf4j
public class SentinelResourceController {

    @GetMapping("/test")
    @SentinelResource(value = "sentinel_resource_test", blockHandler = "block")
    public String test(@RequestParam(required = false) String name) {
        if (StringUtils.isBlank(name)) {
            throw new IllegalArgumentException("name不能为空");
        }
        return name;
    }

	
    public String block(String a, BlockException e) {
        log.warn("限流,或者降级了", e);
        return "限流,或者降级了 block";
    }

	
    public String fallback(String a) {
        log.warn("限流,或者降级了 fallback");
        return "限流,或者降级了 fallback";
    }

}
  • /sentinel_resource/test接口访问


  • 新增一条降级规则,异常比例阈值为0.1

  • 不传递参数频繁调用


  • 删除降级规则新增一条QPS为1的流控规则

  • 频繁访问接口导致限流



blockHandlerClass 单独配置
  • TestBlockHandler.java
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestBlockHandler {
    
    public static String block(String name, BlockException e) {
        log.warn("限流,或者降级了 block", e);
        return "限流,或者降级了 block";
    }
}
  • SentinelResourceController.java
@GetMapping("/test")
@SentinelResource(
        value = "sentinel_resource_test",
        blockHandler = "block",
        blockHandlerClass = TestBlockHandler.class,
        fallback = "fallback"
)
public String test(@RequestParam(required = false) String name) {
    if (StringUtils.isBlank(name)) {
        throw new IllegalArgumentException("name不能为空");
    }
    return name;
}

注解属性
  • @SentinelResource注解属性
  • 出自:https://www.itmuch.com/spring-cloud-alibaba/sentinel-resoure-annotation/
属性作用是否必须
value资源名称
entryTypeentry类型,标记流量的方向,取值IN/OUT,默认是OUT
blockHandler处理BlockException的函数名称,函数要求:
1. 必须是 public
2.返回类型与原方法一致
3. 参数类型需要和原方法相匹配,并在最后加 BlockException 类型的参数。
4. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定blockHandlerClass里面的方法
blockHandlerClass存放blockHandler的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同blockHandler。
fallback用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。函数要求:
1. 返回类型与原方法一致
2. 参数类型需要和原方法相匹配,Sentinel 1.6开始,也可在方法最后加 Throwable 类型的参数。
3.默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定fallbackClass里面的方法。
fallbackClass存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
defaultFallback用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:
1. 返回类型与原方法一致
2. 方法参数列表为空,或者有一个 Throwable 类型的参数。
3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
exceptionsToIgnore指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出。
exceptionsToTrace需要trace的异常Throwable

注:若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出。



- End -
白嫖有风险
点赞加收藏
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号