Sentinel注解@SentinelResource详解

Sentinel注解@SentinelResource详解

熔断

针对访问超过限制【sentinel中配置的限制】的资源,通过java代码配置,返回一个自定义的结果,需要用到 @SentinelResource 注解的 blockHandlerClassblockHandler 属性。

blockHandlerClass:自定义处理类

blockHandler:自定义处理方法,填方法名即可

配置方式

// 接口配置
@GetMapping(path = {"/testD"})
@SentinelResource(value = "test_d",blockHandlerClass = HandlerConfig.class,blockHandler = "errorMsg")
public Map testD(@RequestParam("p1") String p1){Map result = new HashMap<String,Object>();result.put("sentinel_server:","testD");return result;
}
// 自定义限流后的返回结果类
public class HandlerConfig {public static Map errorMsg(String p1,BlockException blockException){Map result = new HashMap<String,Object>();result.put("error:","400");result.put("msgA","接口限流");result.put("p1",p1);return result;}
}

⚠️注意

  1. testD方法自定义返回结果处理方法errorMsg 必须返回统一的数据类型
  2. 如果testD方法中携带参数,那么 自定义返回结果处理方法errorMsg 必须定义类型,顺序一样的参数
  3. 自定义返回结果处理方法errorMsg 必须使用static修饰
  4. 自定义返回结果处理方法errorMsg 的参数必须携带BlockException且必须作为最后一个参数

内部错误

对于方法内部出现的异常,sentinel也是可以处理的,通过java代码配置,不返回一个类似如下图的报错,而是返回一个自定义的结果。需要用到 @SentinelResource 注解的 fallbackClassfallback 属性。

📓 对于内部异常的处理,即使不在sentinel中配置,也可以正常执行。

fallbackClass:自定义处理类

fallback:自定义处理方法,填方法名即可

配置方式

// 接口配置
@GetMapping(path = {"/testD"})
@SentinelResource(value = "test_d",fallbackClass = FallbackConfig.class, fallback="handlerException")
public Map testD(@RequestParam("p1") String p1){int i = 10/0;// 这里一定会触发异常Map result = new HashMap<String,Object>();return result;
}
// 自定义的对方法内部产生的异常返回我们自定义的结果处理类
@Slf4j
public class FallbackConfig {public static Map handlerException(String p1){Map result = new HashMap<String,Object>();result.put("error:","400内部错误");result.put("p1",p1);return result;}
}

⚠️注意

  1. testD方法自定义返回结果处理方法handlerException 必须返回统一的数据类型
  2. 如果testD方法中携带参数,那么 自定义返回结果处理方法handlerException 必须定义类型和参数名以及顺序一样的参数
  3. 自定义返回结果处理方法handlerException 必须使用static修饰

内部错误和熔断同时存在的情况

那么如果说一个web接口既存在发生内部错误的可能,也需要超阈熔断。那么这两个配置,是否可以同时配置呢?直接说答案:可以!在未超阈的前提下,直接进入web接口方法中,如果方法执行出现内部错误,走fallback,熔断后走HandlerConfig,根本就不到fallback这一步,直到时间窗口过去进入新的时间窗口。

开发者自定义忽略异常

绝大多数开发环境中,以上两种配置方式已经足够使用;不过在一些特殊的情况下,开发者不希望sentinel对某些异常直接以自定义fallback方法的形式返回,而是直接返回异常本身,这就需要另一个属性exceptionsToIgnore,它所包含的异常是不被sentinel的fallback管理的,也就是说一旦发生它所定义的异常,程序将不会再走自定义的fallback方法

@GetMapping(path = {"/testD"})
@SentinelResource(value = "test_d",blockHandlerClass = HandlerConfig.class,blockHandler = "errorMsg",fallbackClass = FallbackConfig.class, fallback="fallback",exceptionsToIgnore = {IllegalArgumentException.class})
public Map testD(@RequestParam("p1") String p1){if ( p1.equals("admin")){// 非法参数异常被exceptionsToIgnore属性包含,所以不会走fallback方法,而是直接返回异常throw new IllegalArgumentException("非法参数异常-admin不能用于申请");} else if ( p1.isEmpty() ) {// 空指针异常并未被exceptionsToIgnore属性包含,所以最后还是要走fallback方法throw new NullPointerException("p1不能为空");}Map result = new HashMap<String,Object>();result.put("sentinel_server:","testD");result.put("p1:",p1);return result;
}

演示效果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475313.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron实战之进程间通信

进程间通信&#xff08;IPC&#xff09;并非仅限于 Electron&#xff0c;而是源自甚至早于 Unix 诞生的概念。尽管“进程间通信”这个术语的确创造于何时并不清楚&#xff0c;但将数据传递给另一个程序或进程的理念可以追溯至 1964 年&#xff0c;当时 Douglas McIlroy 在 Unix…

review 10

整理磁盘操作的完整流程&#xff0c;如何接入虚拟机&#xff0c;是否成功识别&#xff0c;对磁盘分区工具的使用&#xff0c;格式化&#xff0c;挂载以及取消挂载、复习cp、mv和find指令 1&#xff1a;U盘接入虚拟机 在弹出窗口直接选择 虚拟机-可移动设备-找到u盘-连接 2&a…

04_device_bus_driverLinux内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读45次。环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%…

实习日志15

1.大改了一下界面 1.1.识别与验真 1.2.历史记录 2.改了几个bug 2.1.改json格式用JSON.stringify(value,null,2); 2.2.内嵌页面值与原页面值重复 2.3.验真条件判断 if (isVerifyCell.getValue() "不需要") {if (verifyResultCell.getValue() ! "未查验")…

树和二叉树的基本知识

一、树的概念及结构 1.树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

Linux系统的历史记录添加时间和IP信息

1 为什么要优化系统历史记录 对于linux系统&#xff0c;默认情况下&#xff0c;系统记录的历史命令比较简单。某些历史记录可能也无法正常保存&#xff0c;因此当服务器出现异常&#xff0c;希望通过历史命令来了解曾经做了哪些操作时&#xff0c;往往非常被动&#xff0c;下面…

挑战杯 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

宜昌博物馆龙文物展,以数据为盾完成文物保护

​一、湖北宜昌博物馆龙文物精品展的独特魅力 近日&#xff0c;在湖北宜昌博物馆举行的甲辰年龙文物精品展上&#xff0c;多件包含“龙元素”的文物正式向社会展出。龙自古以来就是中华民族象征&#xff0c;带有“龙图案”或“龙元素”的物件&#xff0c;广泛存在于中国人“吃…

vue-productionSourceMap作用

当其设置为false时(productionSourceMap: false) 当其设置为true时(productionSourceMap: true) 注:1.当设置为true时,打包后每个文件都有一个.map文件,其目的是为了精确定位代码错误 2.当设置为false时,可减少项目打包大小 3.正式环境禁止使用true,因为其可通过反编译.map文件…

固定资产与总账对账,业务系统出不来数据?

1、【财务会计】-【固定资产】-【与总账对账】 2、【财务会计】-【总账】-【对账执行】 以上两个节点都可以进行 “固定资产与总账” 对账执行 操作。 问题: 固定资产与总账对账,业务系统出不来数据?如下图 : 原因: 固定资产对账要确保,对账月是最早对账月才行,即…

圆筒形正压式采样器

一个人不愿意努力的时候&#xff0c;你怎样帮他也没有用&#xff01;一个人不愿意被点燃的时候&#xff0c;你怎样燃烧也没有用&#xff01;自己想醒&#xff0c;没有闹铃也能够醒来&#xff01;自己想努力&#xff0c;没有帮助也能够成功&#xff01;自己想点燃梦想&#xff0…