Sentinel学习(七) API、注解、整合Feign

Sentinel API

这里介绍三个重要的API。

  • ContextUtil
  • Tracer
  • SphU
    @GetMapping("/test-sentinel-api")
    public String testSentinelApi(@RequestParam(required = false) String a) {
   
   
     
        //定义一个sentinel受保护的资源,名称是test-sentinel-api
        String resourceName = "test-sentinel-api";
        //
        ContextUtil.enter(resourceName, "test-wfw");
        Entry entry = null;
        try {
   
   
     
            entry = SphU.entry(resourceName);
            //被保护的逻辑
            if (StringUtils.isEmpty(a)) {
   
   
     
                throw new IllegalArgumentException("a is not null");
            }
            return a;
        } catch (BlockException be) {
   
   
     
            //如果受保护的资源被限流或者降级了 就会抛BlockException
            log.warn("限流或者降级了", be);
            return "限流或者降级了";
        } catch (IllegalArgumentException ie) {
   
   
     
            //统计 IllegalArgumentException 发生的次数、占比。。。
            Tracer.trace(ie);
            return "a is not null";
        } finally {
   
   
     
            if(entry != null) {
   
   
     
                //退出entry
                entry.exit();
            }
            ContextUtil.exit();
        }

    }

Sentinel 注解
属性 作用 是否必须
value 资源名称
entryType entry类型,标记流量的方向,取值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【1.6】 存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
defaultFallback【1.6】 用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:1. 返回类型与原方法一致 2. 方法参数列表为空,或者有一个 Throwable 类型的参数。3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
exceptionsToIgnore【1.6】 指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出。
exceptionsToTrace 需要trace的异常 Throwable

限流处理的方法。

    @GetMapping("/test-sentinel-resource")
    @SentinelResource(value = "test-sentinel-resource",
            blockHandlerClass = TestBlock.class,
            blockHandler = "block",
            fallbackClass = TestFallBack.class,
            fallback = "fallBack"
    )
    public String testSentinelResource(@RequestParam(required = false) String a) {
   
   
     
        if (StringUtils.isEmpty(a)

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: