slf4j注解log报错_这个注解一次搞定限流与熔断降级:@SentinelResource
在之前的《使用Sentinel实现接口限流》一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibaba-sentinel,就完成了对所有Spring MVC接口的限流控制。然而,在实际应用过程中,我们可能需要限流的层面不仅限于接口。可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。呢么,这个时候我们就不得不手工定义需要限流的资源点,并配置相关的限流策略等内容了。
今天这篇我们就来一起学习一下,如何使用@SentinelResource注解灵活的定义控制资源以及如何配置控制策略。
自定义资源点
下面的例子基于您已经引入了Spring Cloud Alibaba Sentinel为基础,如果您还不会这些,建议优先阅读《使用Sentinel实现接口限流》。
第一步:在应用主类中增加注解支持的配置:
@SpringBootApplicationpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } // 注解支持的配置Bean @Bean public SentinelResourceAspect sentinelResourceAspect() { return new SentinelResourceAspect(); }}
第二步:在需要通过Sentinel来控制流量的地方使用@SentinelResource注解,比如下面以控制Service逻辑层的某个方法为例:
@Slf4j@Servicepublic class TestService { @SentinelResource(value = "doSomeThing") public void doSomeThing(String str) { log.info(str); }}
到这里一个需要被保护的方法就定义完成了。下面我们分别说说,定义了资源点之后,我们如何实现不同的保护策略,包括:限流、降级等。
如何实现限流与熔断降级
在定义了资源点之后,我们就可以通过Dashboard来设置限流和降级策略来对资源点进行保护了。同时,也可以通过@SentinelResource来指定出现限流和降级时候的异常处理策略。下面,就来一起分别看看限流和降级都是如何实现的。
实现限流控制
第一步:在Web层调用这个被保护的方法:
@RestControllerpublic class TestController { @Autowired private TestService testService; @GetMapping("/hello") public String hello() { estService.doSomeThing("hello " + new Date()); return "didispace.com"; }}
第二步:启动测试应用,启动Sentinel-Dashboard。发一个请求到/hello接口上,使得Sentinel-Dashboard上可以看到如下图所示的几个控制点:
可以看到,除了如之前入门实例中那样有/hello资源点之外,多了一个doSomeThing资源点。可以通过界面为这个资源点设置限流规则,比如将其QPS设置为2。由于/hello资源不设置限流规则,所以只要请求/hello接口,就可以直接模拟调用doSomeThing资源,来观察限流规则是否生效。
下面可以通过任何你喜欢的工具来调用/hello接口,只要QPS超过2,那么就会出现如下的错误返回,代表限流策略生效了。
此时,服务端的控制台也会有对应的限流报错日志:
2019-06-27 11:30:43.514 INFO 36898 --- [nio-8001-exec-3] c.d.a.sentinel.service.TestService : aaa2019-06-27 11:30:43.905 ERROR 36898 --- [nio-8001-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.reflect.UndeclaredThrowableException] with root causecom.alibaba.csp.sentinel.slots.block.flow.FlowException: null
实现限流的异常处理
默认情况下,Sentinel对控制资源的限流处理是直接抛出异常,也就是上一节中贴出的日志内容。在没有合理的业务承接或者前端对接情况下可以这样,但是正常情况为了更好的用户业务,都会实现一些被限流之后的特殊处理,我们不希望展示一个生硬的报错。那么只需要基于上面的例子做一些加工,比如:
@Slf4j@Servicepublic class TestService { @SentinelResource(value = "doSomeThing
slf4j注解log报错_这个注解一次搞定限流与熔断降级:@SentinelResource相关推荐
- slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...
大家好,我是程序员7歌! 今天我将为大家讲解如何通过自定义注解记录接口访问日志.一般的开发中,有两种方式可以记录日志信息,第一种:把接口日志信息保存到日志文件中,第二种:把接口操作日志保存到数据库中, ...
- Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解
在之前的<使用Sentinel实现接口限流>一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibab ...
- Spring循环引用-@Async注解启动报错,而@Transactional则不会
目录 一.问题描述 二.问题分析 1.代理类 2.代理过程 三.结论 上接<Spring循环引用-@Async注解启动报错分析> 一.问题描述 Bean1Service注解@Async 启 ...
- 解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题
解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题 参考文章: (1)解决非controller使用@Autowired注 ...
- IDEA中实现接口时注解@Override报错的解决方法
IDEA中实现接口时注解@Override报错的解决方法 参考文章: (1)IDEA中实现接口时注解@Override报错的解决方法 (2)https://www.cnblogs.com/liulao ...
- 关于Servlet中注解:@WebServlet注解一直报错的解决办法
开始试过网上的办法,导入servlet-api和jsp-api包到项目里面,但是@WebServlet注解报错却解决不了,对比之前能运行的项目,发现这两个包是要导进来,但是不是直接导入项目的lib下, ...
- 安装MHA中清理Relay log报错
安装MHA中清理Relay log报错 [root@MHA3 ~]# /usr/bin/purge_relay_logs --user=root --password=123456 -disable ...
- mysql 5.6.23 源码包安装报错_大环境下MySQL5.6源码安装实战一步步教你 CentOS6.5_64bit下编译安装...
一.关闭防火墙 chkconfig iptables off service iptables stop 二.检查操作系统上是否安装了MySQL [[email protected] backup]# ...
- Communication error with Jack server , try ‘jack-diagnose‘ or see Jack server log 报错解决办法
创作不易,请尊重原创,转载注明出处: https://blog.csdn.net/An_Times/article/details/121334749 Communication error with ...
最新文章
- 制作欧比旺·克诺比逼真的CG角色学习教程
- 【总结】Kylin LDAP配置
- 基于python的聊天软件的设计与实现_Python基于TCP实现会聊天的小机器人功能示例...
- java数据结构基础名词解释
- 小红书 “红”到翻车:你的骚操作闪了我的腰?
- Hive的10种常用优化总结,再也不怕MapReduce分配不均了
- Java网络编程之服务端中的Socket
- EditPlus配置Java运行环境
- Excel怎么快速对比两个工作表的异同
- 51单片机两只老虎c语言程序,源码共享:51单片机上实现7首简单音乐的汇编代码...
- 实施MES系统的成功率只有50%,你知道为什么吗?
- jsp、servlet与javabean的区别180110
- Windows系统重装系统和激活
- SWUSTOJ #77 计算员工周工资
- 访问认证(三):Bearer
- 用户行为分析(如何用数据驱动增长)-读书笔记2
- 考研概率论与数理统计(知识点梳理)
- CRC 循环冗余检验【计网必考】
- 数据方舟插件_数据方舟 for Excel工具箱使用说明
- 简单网页设计(苍兰诀)html+css
热门文章
- Python版双链表结构与有关操作
- C语言 如何判断一个主机是大端还是小端
- 基于MVC的jpetstore项目分析
- svn提交提示服务器文件被锁,svn被锁定怎么解决-svn被锁定的解决方法 - 河东软件园...
- QT每日一练day27:绘制不规则窗体
- QT每日一练day15:QColorDialog颜色对话框
- 计算机上配置的网卡实际上是,()计算机上配置的网卡,实质上是_ ___。
- Linux离线的nginx安装启动,linux-离线安装nginx
- php 动态参数,PHP 动态配置运行时环境参数ini_xxx,extension_loaded
- red hat linux综合实验报告,实验一 Red Hat Linux 9.doc