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;
}

演示效果如下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux CPU 性能分析工具火焰图(Flame Graphs)认知

写在前面 博文内容为 《BPF Performance Tools》 读书笔记整理详细了解小伙伴可以访问作者官网&#xff1a;https://www.brendangregg.com/flamegraphs.html有油管上分享的作者在USENIX ATC 2017 的视屏理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&a…

恢复被.target勒索病毒加密的数据文件:拒绝向.target勒索病毒支付赎金

引言&#xff1a; 在当今数字时代&#xff0c;勒索病毒已成为网络安全领域的一大威胁&#xff0c;而.target勒索病毒是其中引起广泛关注的一种变种。本文将深入探讨.target勒索病毒的特点以及被其加密的数据文件恢复方法。数据的重要性不容小觑&#xff0c;您可添加我们的技术…

2024023期传足14场胜负前瞻

新的一年祝大家行大运、发大财、中大奖&#xff01;2024023期赛事由英超2场&#xff0c;德甲2场、意甲4场、西甲3场、法甲3场组成。售止时间为2月18日&#xff08;周六&#xff09;21点30分&#xff0c;敬请留意&#xff1a; 本期中深盘较少&#xff0c;1.5以下赔率仅1场&#…

阿里云服务器租用费用价格多少钱啊?一年、1个月、1小时

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

数学建模【非线性规划】

一、非线性规划简介 通过分析问题判断是用线性规划还是非线性规划 线性规划&#xff1a;模型中所有的变量都是一次方非线性规划&#xff1a;模型中至少一个变量是非线性 非线性规划在形式上与线性规划非常类似&#xff0c;但在数学上求解却困难很多 线性规划有通用的求解准…

Sora技术报告——Video generation models as world simulators

文章目录 1. 视频生成模型&#xff0c;可以视为一个世界模拟器2. 技术内容2.1 将可视数据转换成patches2.2 视频压缩网络2.3 Spacetime Latent Patches2.4 Scaling transformers 用于视频生成2.5 可变的持续时间&#xff0c;分辨率&#xff0c;宽高比2.6 抽样的灵活性2.7 改进框…

《剑指 Offer》专项突破版 - 面试题 44 : 二叉树中每层的最大值(两种方法 + C++ 实现)

目录 前言 一、只用一个队列 二、使用两个队列 前言 题目链接&#xff1a;LCR 044. 在每个树行中找最大值 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 输入一棵二叉树&#xff0c;请找出二叉树中每层的最大值。例如&#xff0c;输入下图中的二叉树&#x…

仅需5元,手把手教你训练纳西妲GPT-SoVITS模型

资源下载及音频试听&#xff1a; 仅需5元&#xff0c;手把手教你训练纳西妲GPT-SoVITS模型 - 风屿岛 (biliwind.com) 购买服务器 首先&#xff0c;我们需要买一台显卡云服务器 极度推荐使用雨云&#xff0c;优惠码&#xff1a;wp-admin 账户注册成功后&#xff0c;前往&am…

机试复习-4

1.string类 string类型和数值的转换 ※数值→字符串 to_string函数 //具体做法 int i1234; string gto_string(i);//这样就转成字符串1234了 //下面就是字符串转为数字&#xff0c;类似下面还有stof,stoi,stod string d "1289347647"; int j stoi(d); cout <…

2024.2.17 作业

1.终端输入一个字符&#xff0c;判断是大写字母小写字母还是数字字符 代码&#xff1a; #! /bin/bash read var case $var in [0-9]) echo 数字 ;; [[:lower:]]) echo 小写字母 ;; [[:upper:]]) echo 大写字母 …

在 Geoserver 中添加自定义的室内坐标系

要在 Geoserver 中添加自定义的室内坐标系&#xff0c;您需要在数据目录中的 user_projections 文件夹下创建或编辑一个 epsg.properties 文件&#xff0c;然后在文件末尾添加您的坐标系的定义&#xff0c;使用 WKT&#xff08;Well-Known Text&#xff09;格式。您还需要为您的…

一些配置问题记录

真的很感慨 为什么一开始的下载的软件还能用 卸载或重装后的软件总是存在各种各样的错误 真令人心烦 GNURADIO运行简单的采集信号程序报错&#xff0c; 其实不太理解为什么会出现这类错误&#xff0c;解决方法为 安装 jackd2 软件包&#xff0c;然后尝试手动启动 Jack 服务器…

第四节笔记:XTuner 大模型单卡低成本微调实战

视频链接&#xff1a;https://www.bilibili.com/video/BV1yK4y1B75J/?spm_id_from333.788&vd_source3bbd0d74033e31cbca9ee35e111ed3d1 课程笔记&#xff1a; 1.Finetune简介 指令微调&#xff1a; 开始的大模型可能不知道问的是问题 这三种角色的划分只有在微调训练阶…

自动化测试-RIDE编写自动化脚本

自动化脚本是软件测试的必修内容&#xff0c;是自动化测试的核心&#xff0c;脚本的逻辑严谨性、可维护性非常重要&#xff0c;优秀的自动化脚本需要能兼顾用例的正确有效性和自动化测试的效率&#xff0c;本篇文章将介绍如何用RIDE写自动化脚本。我们将深入探讨RIDE的具体用法…

对待不合理需求,前端工程师如何优雅的say no!

曾经有位老板&#xff0c; 每次给前端提需求&#xff0c;前端都说实现不了&#xff0c;后来他搜索了一下&#xff0c;发现网上都有答案。他就在招聘要求上加了条&#xff1a;麻烦你在说不行的时候&#xff0c;搜索一下。 上面是一个段子&#xff0c;说的有点极端了&#xff0c;…

【AIGC】Stable Diffusion的插件入门

一、上文中作者使用插件包的方式下安装插件&#xff0c;用户也可以从Stable Diffusion的界面安装插件&#xff0c;如下图所示&#xff0c;在相应的插件后面点安装按钮。 二、介绍一些比较好用的插件 “adetailer” 插件是 Stable Diffusion 中的一个增强功能&#xff0c;旨在提…

Practical User Research for Enterprise UX

2.1 Why It’s Hard to Get Support for Research in Enterprises 2.1.1 Time and Budget Instead of answering the question “What dowe gain if we do this research?”, ask instead “What do we stand to lose if we don’t do the research?” 2.1.2 Legacy Thinkin…

Flink理论—Flink架构设计

Flink架构设计 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器&#xff0c;例如Hadoop YARN&#xff0c;但也可以设置作为独立集群甚至库运行,例如Spark 的 Standalone Mode 本节概述了 Flink 架构&…

QT 信号和槽机制

信号&#xff1a;各种事件 槽&#xff1a; 响应信号的动作 当某个事件发生后&#xff0c;如某个按钮被点击了一下&#xff0c;它就会发出一个被点击的信号&#xff08;signal&#xff09;。 某个对象接收到这个信号之后&#xff0c;就会做一些相关的处理动作&#xff08;称为槽…

LeetCode刷题计划---day3

卡码网 练习ACM模式 https://kamacoder.com/ 11 可用静态链表存储树&#xff0c;最后求某个结点到共同树根的长度。 #include <iostream> #include <vector> using namespace std;int main() {int n;int a,b;vector<int> nums vector<int>(30,0);wh…