千家信息网

@SentinelResource注解怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了@SentinelResource注解怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@SentinelReso
千家信息网最后更新 2026年11月03日@SentinelResource注解怎么用

这篇文章主要介绍了@SentinelResource注解怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

@SentinelResource 注解

注意:注解方式埋点不支持 private 方法。

注解介绍

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。

@SentinelResource 注解包含以下属性:

1.value:资源名称,必需项(不能为空)

2.entryType:entry 类型,可选项(默认为 EntryType.OUT)

3.blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

4.fallback/fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:

  • 返回值类型必须与原函数返回值类型一致;

  • 方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。

  • fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

5.defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:

  • 返回值类型必须与原函数返回值类型一致;

  • 方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。

  • defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

5.exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

1.8.0 版本开始,defaultFallback 支持在类级别进行配置。

注:1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

特别地,若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出(若方法本身未定义 throws BlockException 则会被 JVM 包装一层 UndeclaredThrowableException)。

注解使用

代码编写

代码结构

SentinelController

/**  * 注解 @SentinelResource学习  * @author Milo Lee  * @date 2021-03-23 11:33  */ @RestController public class SentinelController {      @Autowired     private ISentinelService service;      @GetMapping(value = "/hello/{s}")     public String apiHello(@PathVariable long s) {         return service.hello(s);     } }

ISentinelService

/**  * @author Milo Lee  * @date 2021-03-23 11:34  */ public interface ISentinelService {      String hello (long s); }

SentinelServiceImpl

/**  * @author Milo Lee  * @date 2021-03-23 11:34  */ @Service @Slf4j public class SentinelServiceImpl implements ISentinelService {       /**      *Sentinel 提供了 @SentinelResource 注解用于定义资源      * @param s      * @return      */     @Override     //value:资源名称,必需项(不能为空)     //blockHandler 对应处理 BlockException 的函数名称     //fallback  用于在抛出异常的时候提供 fallback 处理逻辑     @SentinelResource(value = "hello", blockHandler = "exceptionHandler", fallback = "helloFallback")     public String hello(long s) {         log.error("hello:{}",s);         return String.format("Hello at %d", s);     }      // Fallback 函数,函数签名与原函数一致或加一个 Throwable 类型的参数.     public String helloFallback(long s) {         log.error("helloFallback:{}",s);         return String.format("Halooooo %d", s);     }      // Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致.     public String exceptionHandler(long s, BlockException ex) {         // Do some log here.         log.error("exceptionHandler:{}",s);         ex.printStackTrace();         return "Oops, error occurred at " + s;     } }

启动我们的项目,访问我们的测试方法(多刷新几次,去看控制面板)

限流测试

现在我们为我们的资源:hello 配置一个流控规则,配置步骤如下图


配置成功:


回到我们的页面,快速刷新页面,我们会发现偶尔有如下信息显示,说明我们配置的流控规则成功进行了拦截


控制台日志:


根据我们上面的学习,如果超过我们配置的QPS,代码会抛出BlockException异常,为什么代码里面是FlowException,通过查看源码我们会发现FlowException其实是BlockException的子级

经过上面的测试,我们发现成功实现注解开发实现了限流

降级测试

降级测试之前,我们需要修改下我们的代码

前:

@SentinelResource(value = "hello", blockHandler = "exceptionHandler", fallback = "helloFallback")

后:

@SentinelResource(value = "hello",  fallback = "helloFallback")

配置流控规则

配置降级规则:


测试方法

根据我们配置的规则,如果qps>1,肯定会出发BlockException,这时候降级规则判断异常比例超过请求次数的20%,就会自动触发降级?;


我的点击速率: 匀速 ---到--- 快速?

大家观察这里的日志,在我刚开始匀速点击时候,并没有进入helloFallback方法,当我快速点击时候,进入了helloFallback方法,说明这时候降级规则生效,触发降级,进入回调函数helloFallback中;


感谢你能够认真阅读完这篇文章,希望小编分享的"@SentinelResource注解怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

函数 类型 方法 配置 处理 注解 参数 规则 名称 测试 一致 代码 资源 逻辑 时候 篇文章 成功 对象 学习 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 互联网科技公司简介 云之行互联网科技 杭州互联网科技公司 友谊互联网络科技 互联网金融监管科技 深圳卡尔迅互联网科技有限公司怎么样 互联网科技生活的内容 福州新华互联网科技学校 知乎 宜昌元轩互联网科技有限公司 广州市恰铎互联网科技有限公司 洛阳共同富裕互联网科技有限公司 群盈汇互联网科技有限公司 沐思想互联网科技有限公司 山东星卡互联网科技有限公司官网 江苏苏星互联网科技有限公司 互联网科技实习生岗位 工业互联网科技成果转化 云鲸互联网络科技有限公司 深圳互联网科技园地址 手冲咖啡和咖啡机区别 河南云网互联网络科技有限公司 科技互联网企业 互联网科技巨头监管 互联网金融科技委员会 深圳卡尔迅互联网科技有限公司怎么样 青海省互联网新科技 佳云科技和互联网广告 用友工业互联网科技发展 国产互联网科技公司
0