@SentinelResource使用
@SentinelResource使用
官网@SentinelResource的使用:注解支持 · alibaba/Sentinel Wiki (github.com)
@SentinelResource的介绍
@SentinelResource来源于Alibaba的Sentinel的注解支持,根据Sentinel官方文档的描述,Sentinel可以通过以下方式定义资源:
- 方式一:主流框架的默认适配
- 方式二:抛出异常的方式定义资源
- 方式三:返回布尔值方式定义资源
- 方式四:注解方式定义资源(@SentinelResource的来源)
- 方式五:异步调用支持
@SentinelResource的参数
@SentinelResource的参数如下:
value
:资源名称entryType
:entry 类型,可选项(默认为EntryType.OUT
),可选EntryType.OUT
和EntryType.IN
blockHandler/ blockHandlerClass
:定位对应处理BlockException
的函数名称blockHandler 函数访问范围需要是public
,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为BlockException
。fallback
/fallbackClass
:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。defaultFallback
(since 1.6.0):默认的 fallback 函数名称,可选项exceptionsToIgnore
(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。
官方案例
// 原函数
@SentinelResource(value = "hello", blockHandler = "exceptionHandler", fallback = "helloFallback")
public String hello(long s) {
return String.format("Hello at %d", s);
}
// Fallback 函数,函数签名与原函数一致或加一个 Throwable 类型的参数.
public String helloFallback(long s) {
return String.format("Halooooo %d", s);
}
// Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致.
public String exceptionHandler(long s, BlockException ex) {
// Do some log here.
ex.printStackTrace();
return "Oops, error occurred at " + s;
}