Sentinel注解@SentinelResource详解

news2025/8/17 12:58:54

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.coloradmin.cn/o/1453404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

防御保护--内容安全过滤

目录 文件过滤 内容过滤技术 邮件过滤技术 应用行为控制技术 DNS过滤 URL过滤 防火墙 ---- 四层会话追踪技术 入侵防御 ---- 应用层深度检测技术 深度包检测深度流检测 随着以上俩种的成熟与完善&#xff0c;提出了所谓的内容安全过滤 当然上网行为确实需要治理&…

反转链表【基础算法精讲 06】

视频地址 反转链表【基础算法精讲 06】_哔哩哔哩_bilibili 概念 链表的每一个结点都包含节点值 和1指向下一个结点的next指针 , 链表的最后一个结点指向空; 206 . 反转链表 用cur记录当前遍历到的结点 &#xff0c; 用pre表示下一个结点 &#xff0c; 用nxt表示cur的下一个…

Windows 编译 yangfengzzz/fluid-engine-OpenVDB

我想将 OpenVDB 接入 doyubkim 的流体引擎 https://github.com/doyubkim/fluid-engine-dev 然后搜到已经有人做过这件事了 https://github.com/yangfengzzz/fluid-engine-OpenVDB Windows 编译 yangfengzzz/fluid-engine-OpenVDB 但是我是 windows&#xff0c;所以想要编译…

代码随想录算法训练营第三二天 | 买卖股票、跳跃游戏

目录 买卖股票的最佳时机II跳跃游戏跳跃游戏ii LeetCode 122.买卖股票的最佳时机II LeetCode 55. 跳跃游戏 LeetCode 45.跳跃游戏II 买卖股票的最佳时机II 只有一只股票&#xff01; 当前只有买股票或者卖股票的操作。 最终利润是可以分解的&#xff1a;把利润分解为每天为…

【机器学习】机器学习常见算法详解第4篇:KNN算法计算过程(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习&#xff0c;伴随浅显易懂的数学知识&#xff0c;让大家掌握机器学习常见算法原理&#xff0c;应用Scikit-learn实现机器学习算法的应用&#xff0…

Vue练习1:组件开发1(头像组件)

样式预览 注释代码 <template><div class"img-box":style"{ //动态style必须为对象width: size rem,height: size rem}"><imgclass"avatar-img":src"url" //动态url/></div> </templ…

【ARM架构】ARMv8-A 系统中的安全架构概述

一个安全或可信的操作系统保护着系统中敏感的信息&#xff0c;例如&#xff0c;可以保护用户存储的密码&#xff0c;信用卡等认证信息免受攻击。 安全由以下原则定义&#xff1a; 保密性&#xff1a;保护设备上的敏感信息&#xff0c;防止未经授权的访问。有以下几种方法可以做…

算法详解:滑动窗口-- 最大连续1的个数 III

题目来源:力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 本期讲解滑动窗口经典例题,我会从三个点开始讲解题目1.题目解析2.算法原理 3.编写代码 1.题目解析 这道题目理解起来还是比较简单的,我们简单分析一下,也就是给定一个数组,数组是由1和0组成…

PLC-Recorder的延伸分析功能说明

目录 一、缘起 二、如何从PLC-Recorder获取数据 1、在线获取 2、全自主打开数据文件 3、延伸分析 三、设置方法 四、效果展示 一、缘起 在各个行业&#xff0c;在不同的场景中&#xff0c;朋友们拿到数据后&#xff0c;想做的事情五花八门&#xff0c;有做宏观分析的、…

ABC341 A-G

Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; - AtCoder B读不懂题卡了&#xff0c;F读假题卡了&#xff0c;开题开慢了rank了 A - Print 341 题意&#xff1a; 打印一串交替出现的包含N个0&#xff0c;N1个1的01串 代码&…

OpenCV-40 绘制直方图

一、使用matplotlib画直方图 可以利用matplotlib把OpenCV统计得到的直方图绘制出来 示例代码如下&#xff1a; import cv2 import matplotlib.pyplot as pltlena cv2.imread("beautiful women.png") # 变为黑白图片 gray cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY…

视觉设计师的项目评审复盘攻略:如何提升设计质量与效率

视觉设计师的角色是至关重要的&#xff0c;以确保设计项目满足预期的质量和结果。作为一名视觉设计师&#xff0c;有必要进行定期的项目审查&#xff0c;以确保项目在正轨上进行&#xff0c;并尽早解决任何问题。在本文中我们将讨论可视化设计人员如何做好项目评审&#xff0c;…

HarmonyOS—@State装饰器:组件内状态

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

永久禁止windows自动更新方法

文章目录 前言一、打开本地组策略编辑器二、禁用windows更新总结 前言 每次打开电脑&#xff0c;右下角就会弹出设备更新提示&#xff0c;看着令人烦恼&#xff0c;并且更新可能导致电脑设置发生改变甚至是卡顿&#xff0c;所以为了自己方便于是出了禁用电脑更新的办法&#x…

「算法」二分查找1:理论细节

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;算法详解 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 二分查找算法简介 这个算法的特点就是&#xff1a;细节多&#xff0c;出错率高&#xff0c;很容易就写成死循环有模板&#xff0c;但…

Day46 300最长递增子序列 674最长连续递增子序列 718最长重复子数组 1143最长公共子序列

300 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序…

CV | Segment Anything论文详解及代码实现

本文主要是详解解释了SAM的论文部分以及代码实现~ 论文&#xff1a;2023.04.05_Segment Anything 论文地址&#xff1a;2304.02643.pdf (arxiv.org) 代码地址&#xff1a;facebookresearch/segment-anything: The repository provides code for running inference with the Seg…

【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符类型字符转换和strlen的模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】长篇详解&#xff0c;字符系列篇1-----“混杂”的各种字符函数……&#xff0c;图文讲解各种字符函数&#xff0c;带大家更深刻理解C语言中各种字符函数的应用&#xff0c;感谢观看&#xff0c;支持的可以给个赞哇。 前言…

SpringCloud-Nacos集群搭建

本文详细介绍了如何在SpringCloud环境中搭建Nacos集群&#xff0c;为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤&#xff0c;包括安装、配置以及Nginx的负载均衡设置&#xff0c;读者能够轻松理解并操作整个搭建过程。 一、Nacos集群示意图 Nacos&#xff0…

ClickHouse--12-可视化工具操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 可视化工具操作1 tabixhttp://ui.tabix.io/ 2 DBeaverhttps://dbeaver.io/download/ 可视化工具操作 1 tabix tabix 支持通过浏览器直接连接 ClickHouse&#xff…