ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**`com.alibaba.csp.sentinel.annotation.SentinelResource`** ```java @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface SentinelResource { //资源名称 String value() default ""; //入口类型(入站或出站),默认为出站 EntryType entryType() default EntryType.OUT; //资源类型 int resourceType() default 0; //(1)发生限流时的处理方法,该方法只能是public。 //(2)blockHandler指定的方法的返回值类型必须与原方法一致。 //(3)blockHandler指定的方法的参数列表为原方法的参数列表和最后一个类型为BlockException参数。 String blockHandler() default ""; //(1)发生限流时的处理类。 //(2)blockHandler指定的方法必须与原方法在同一个类中,会导致代码臃肿, // 我们可以将其抽取出来,放在blockHandlerClass指定的类中,减少代码耦合和臃肿。 //(3)blockHandlerClass类中定义的方法必须为public static,否则无法解析。 Class<?>[] blockHandlerClass() default {}; //(1)发生异常时的处理方法。 //(2)fallback指定的方法的返回值类型必须与原函数一致。 //(3)fallback指定的方法的参数列表必须与原函数一致,或者也可以追加一个是Throwable的子类的参数。 String fallback() default ""; //(1)同fallback一样,但通常用于通用的异常处理。 //(2)fallback和defaultFallback同时使用,fallback生效。 //(3)defaultFallback指定的方法的返回值类型必须与原函数一致。 //(4)defaultFallback指定的方法的参数列表必须为空,或者也可以是一个参数,该参数为Throwable的子类。 String defaultFallback() default ""; //(1)发生异常时的处理类。 //(2)fallback或者defaultFallback指定的方法必须与原方法在同一个类中,这样导致业务代码 // 和处理异常的代码耦合度高,代码臃肿,可以使用fallbackClass定义个在其他类的处理 // 异常的方法,减少代码臃肿。 //(3)在该类中定义的处理方法必须为public static,否则无法解析。 Class<?>[] fallbackClass() default {}; //指定需要fallback处理的异常类 Class<? extends Throwable>[] exceptionsToTrace() default {Throwable.class}; //指定哪些异常类不需要fallback处理,按照Java异常那样处理即可 Class<? extends Throwable>[] exceptionsToIgnore() default {}; //blockHandler只处理限流,不处理异常,处理异常由fallback进行处理。 //如果同时配置了blockHandler和fallback,并且某一个资源发生限流又发生异常,则由blockHandler进行处理。 //如果发生降级却没有配置blockHandler,则通过fallback或者defaultFallback将BlockException正常抛出。 } ```