设为首页 - 加入收藏  
您的当前位置:首页 >IT科技 >@SentinelResource注解如何使用?请你过目! 正文

@SentinelResource注解如何使用?请你过目!

来源:亿华互联编辑:IT科技时间:2025-11-05 12:42:37

Hello,注解大家好,我是麦洛,今天带大家来了解一下Sentinel中@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 对象,注意对应的b2b信息网函数必需为 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中;

今天的分享就到这里,谢谢大家

上一篇:图解演示环境版本:本机系统: WIN7虚拟机:VMware Workstation 8 (英文版)安装目标:Ubuntu Desktop 12.04 LTS  (请点击这里)先下载好iso镜像文件详细过程图解:0. 初始画面,点击“Create a New Virtual Machine”(左上Ubuntu为本人已有开发环境机,请忽略)1. 点击“Custom(自定义)”2. 无需选择,直接Next(上面是选Workstation版本的兼容性的,这里默认为当前版本8.0,之前版本的不同在于Limitations(局限),如内存更少,不支持HD Audio等)3. 选择“I will install the operating system later”这里无严格要求的同学,是可以选择第二项“Installer disc image file (ios)”的,之后会VMware会自动得知你的iso是Linux(Ubuntu),只要求你输入Full name,和用户名密码等简单的用户设定,但是这是一个Easy install,如VMware原文所说“When the New Virtual Wizard detects an operating system that supports Easy Install, the wizard prompts you for information about the guest operating system. After the virtual machine is created, the guest operating system installation is automated and VMware Tools is installed.” 我觉得是因为这个OS的自动安装,不完全,导致一些核心命令无法使用、无反应等一些问题。所以有更高要求的同学,不能选这项,需要完全、自定义的安装。4. 在Version下选择“Ubuntu”,注:64位Ubuntu需要选下面那个“Ubuntu 64-bit”5. 设置虚拟机名称(即每次启动VMware左上方显示的名字),之后选择你想的在WIN7里的安装路径(默认在C盘,很不方便)。6. Number of processors(处理器个数)选择为2我是i7处理器,配置较好无压力的,感觉双核比单核好一些(假如没用VMware不会这么设计,但是对于更多的,没必要),下面那个应该没必要选,有非常懂的同学,请留言赐教。7. 内存大小选择,使用自动推荐的1G内存(本机内存8G)。同学们在虚拟机里,应该不会跑什么惊天地泣鬼神的大程序,内存大不等于快,而是更多的数据放在内存里而非硬盘里,对于内存消耗大的程序、系统会变快。去年做本科毕设的时候,调整过虚拟机的内存从1G为2G,结果竟然变慢了,应该是外面WIN7被占用了的问题。8. Network Type网络类型选择,本次选择默认的“NAT”注:这里有一点本人经历的非常重要需要说明,使用“NAT”的话,需要外面的WIN7使用一根线连接上网,才能在Ubuntu里上网(如同Ubuntu是你的真正OS的感觉,不需要手工配置任何IP信息),不能默认使用无线连接。这点对有些笔记本同学可能会造成麻烦。当然不是说不能通过手动配置IP相关解决,但是为了避免每次都配置的麻烦,请直接使用“bridged”桥接手动配置。9. 默认即可,直接“Next”10. 默认即可,直接“Next”第三项为直接划分硬盘给该虚拟机使用,意思应为绕过WIN7的那个文件夹管理,直接给虚拟机只用一块硬盘空间,有高级需要的同学可以选择。所以,注:默认的那个可以轻松实现copy,move,当你想拷给另外一个人,或者换机器的时候。11. 磁盘选择,默认即可,直接“Next”12. 选择“Store virtual disk as a single file”上面那个方框,是说现在就立即分20G给这个虚拟机,假如不够,还是会一点一点随着你的使用增加(跟不选一样)。假如同时没有很多个虚拟机装在WIN7上,或者硬盘空间太大又不放东西,可选。13. 虚拟机文件的存放地址,选个D盘的位置就行了。14. 点击“Finish”,完成了虚拟机的配置工作这里点击“Customize Hardware”的话,有机会对前面不满意的虚拟机硬件设置(处理器个数,内存大小等)重新设置,所以前面不满意的同学,不用点cancel重来,实际上在以后的使用过程,也是可以随时改变虚拟机的配置的,这点不用担心。15. 完成后,可以看到左上角多出了“Ubuntu 12.04”,先别急着Power on,还没装ubuntu呢。。。点击“Edit virtual machine settings”16. 在弹出的settings里,点击“CD/DVD(IDE)”,然后在右侧点击“Use ISO image file”,再选择你开始下载好的Ubuntu 12.04的iso镜像文件的路径然后点“OK”。17. 启动虚拟机,即点击step 15里的“Power on this virtual machine”,之后Ubuntu 12.04开始了安装,先选择语言,然后点击“Install Ubuntu”18. 假如选择“Download updates while installing”为安装过程直接安装最近的更新,假如选择“Install this third-party software”为安装第三方软件19. 选择“Something else”,将要对虚拟机的20G硬盘做手动分区20. 点击“New Partation Table”(新建分区表)21. 在弹出的对话框里,选择“Contunie”22. 选中新出现的“free space”(空闲空间),点击“Add”23. 注意下图中的“Primary”,“Beginning”, “Ext4 ...”均为默认,不需要修改;数字为大小,以MB为单位(注:不用追求1024凑整,硬盘实际上是凑不整的。。。),这里选择10000=10G;最后的“Mount point(挂载点)”下拉列表中,选中“/”,完成该步,点“OK”注意:“/ ” 建议大小在5GB以上。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)非常注意:本人上次弄了个6G,结果进去下libraries,一下就满了,那叫一个悲剧!所以,同学们千万别抱着“5G以上”来想,ubuntu应该自己就占了4、5G,不想悲剧的同学至少8G以上吧,20G确实不大,但是假如打算长期的同学,应该不会使用虚拟机了,20G跑程序,绰绰有余,等喜欢了熟悉了,再来个真的吧。24. 再次选中“free space”(同step 22图中),点击“Add”;注意下图中“Logical”,“Beginning”均为默认,大小选择1000(1G);在Use as的下拉列表中选择“swap area”,注:最后的下拉列表为灰色,意为swap area不用选择挂载点;完成该步,点“OK”注意:“swap area” 即交换分区,建议大小是物理内存的1~2倍。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)不需要太大,1G足以。25. 再次选中“free space”(同step 22图中),点击“Add”;注意下图中“Logical”,“Beginning”, “Ext4 ...”均为默认;注:大小选择也为默认,即所有的剩余空间;最后的“Mount point”下拉列表中,选中“/home”;完成该步,点“OK”注意:“/home” 存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)注:三个分区的顺序不要变,因为/home在最后便于默认选择“剩余的空间”,避免手工分配。26. 至此,所有分区工作已经完成,如下图所示。注:假如不满意可以点击“Revert(还原)”来重新分区,直到满意和准确无误为止。假如感到满意,点击“Install Now”注:上图为悲剧图,6G的/是不够的,这个图没有更新,仅供参考,不比看数字。27. 选择你所在的时区,自动调整时间,夏令时什么的手动调不方便,之后都点击“Continue”以继续28. 键盘选择US,一般国内买的电脑都是这样的,可根据情况自己选择29. Ubuntu的个人设置,根据自己需要填写用户名密码等30. 最后安装完成,点击“Restart Now”重启Ubuntu即可31. 停止在如下画面,按“回车”即可至此,全部安装过程完毕,我们可以进入到Ubuntu 12.04的桌面工作了。一定要注意:由于未使用自动安装,所以现在我们的虚拟机不含有VM Tools,导致无法全屏虚拟机等等问题,需要安装VM tools,详情请搜索即可。
下一篇:先锋耳机产品测评(揭秘先锋耳机产品的卓越音质和出色舒适度)

相关推荐:

最新文章

1.1565s , 11712.140625 kb

Copyright © 2025 Powered by @SentinelResource注解如何使用?请你过目!,亿华互联  滇ICP备2023000592号-16

sitemap

Top