Spring Cloud Alibaba(四)简单接入Sentinel(fallback用法)

article/2025/9/21 0:25:50

@SentinelResource 注解

接着 Spring Cloud Alibaba(三)简单接入Sentinel(Sentinel 控制台),来看一下 @SentinelResource 一些常用的属性:

value : 资源名称,必需项(不能为空)
fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:
返回值类型必须与原函数返回值类型一致;
方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析

首先我们需要开启注解支持,SpringBootApplication 入口添加注解支持。

	// 注解支持的配置Bean@Beanpublic SentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect ();}

先测试一下 fallback,新增一个SentinelTest 方法并增加一个SentinelTestException方法:

@GetMapping ("/sentinel-test/{id}")@SentinelResource ( value = "SentinelTest",fallback = "SentinelTestException")public String SentinelTest(@PathVariable("id") long id){long defaultId = 10L;if (id < defaultId) {throw new RuntimeException ("id bad");}return "Sentinel test OKK!";}/*** fallback* @param id*/public String SentinelTestException (long id) {log.error ("id={}",id);return "Sentinel test Error!";}

启动应用,在浏览器直接访问 http://localhost:1889/sentinel-test/1 和 http://localhost:1889/sentinel-test/11 来看结果。可以看到当id = 1 时,抛出异常,然后通过fallback 属性执行了 SentinelTestException 方法,最后返回的是 "Sentinel test Error!" ,而id = 11 时,程序正常执行完成 返回 "Sentinel test OKK!";
这里 SentinelTestException 还可以增加一个Throwable 类型的参数,可以通过这个参数来实现捕获不同的异常,从而做对应的异常处理。
fallback 函数位置有要求,必须和原方法在同一个类中,实际需求中,我们需要放在其他地方。 通过fallbackClass 指定对应的类的 Class 对象,添加一个 static 函数,否则无法解析。

首先添加一个SentinelController

@RestController
@Slf4j
public class SentinelController {@Autowiredprivate SentinelService sService;@GetMapping ("/sentinel-test2/{id}")public String SentinelTest(@PathVariable("id") long id){return sService.sentinelTest (id);}}

创建一个SentinelService接口以及其实现类,实现类代码如下:

@Service ("sService")
@Slf4j
public class SentinelServiceImpl implements SentinelService{@Override@SentinelResource ( value = "SentinelTest2",fallback ="sentinelTestFallBackClass",fallbackClass = {FallBackService.class})public String sentinelTest ( long id ) {long defaultId = 10L;if (id < defaultId) { //抛出异常,触发熔断降级throw new RuntimeException ("id bad");}return id+" hello OKK!";}
}

创建一个FallBackService类,并定义一个static 函数

@Slf4j
public class FallBackService {public static String sentinelTestFallBackClass ( long id,Throwable e ) {log.error ("异常降级处理");//可以处理各种类型的异常,自定义异常if (e instanceof RuntimeException) {System.out.println ("异常类型");}return id+" Error";}
}

启动应用,在浏览器访问:http://localhost:1889/sentinel-test2/11
在这里插入图片描述
然后访问:http://localhost:1889/sentinel-test2/1
在这里插入图片描述
后台日志也打印了对应的信息:

ERROR 10712 --- [nio-1889-exec-8] c.f.n.c.service.impl.FallBackService     : 异常降级处理

接下来看一下 defaultFallback说明,用法很明显了。需要注意的是 :1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。
若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。
defaultFallback 函数签名要求:
返回值类型必须与原函数返回值类型一致;
方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

刚入坑学习记录一下,如果错误不足,欢迎指出。

Spring Cloud Alibaba 系列学习笔记

Spring Cloud Alibaba(一) 简单实现服务注册与发现

Spring Cloud Alibaba(二) 简单使用nacos配置中心

Spring Cloud Alibaba(三)简单接入Sentinel(Sentinel 控制台)

Spring Cloud Alibaba(四)简单接入Sentinel(fallback用法)

Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)


http://chatgpt.dhexx.cn/article/KQ61o5bl.shtml

相关文章

【mysql】sql优化常用的几种方法,19种最有效的sql优化技巧(转载)

前言 转载 有哪些方法 转载自&#xff1a;https://www.changchenghao.cn/n/174426.html EXPLAIN 做MySQL优化&#xff0c;我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例&#xff0c;标注&#xff08;1、2、3、4、5&#xff09;我们要重点关注的数据&#xff1a; typ…

SQL查询优化技巧

查询优化的本质是让数据库优化器为SQL语句选择最佳的执行计划。一般来说&#xff0c;对于在线交易处理&#xff08;OLTP&#xff09;系统的数据库&#xff0c;减少数据库磁盘I/O是SQL语句性能优化的首要方法&#xff0c;因为磁盘访问通常是数据库性能的瓶颈所在。 另外&#xf…

SQL语句优化有哪些方法

1.如何定位慢查询? mysql默认慢查询为10秒,如果超过10秒,没有数据返回则为慢查询. 当我们通过安全日志启动时,当超过超时时间时,会将超时的SQl存放在日志中,我们去分析这些sql然后进行调优. 2.数据库设计要合理 什么是数据库设计? 主要就是三范式 1p原子性:每列不可再分…

MySQL的SQL优化常用30种方法

1、对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。 &#xff08;1&#xff09;未建立索引前&#xff0c;执行计划是全表扫描&#xff1a; &#xff08;2&#xff09;建立索引后&#xff0c;走索引查询&…

常用SQL优化方法

个人博客请访问 http://www.x0100.top 1、应尽量避免在 where 子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应…

Mysql的sql优化方法

1、选择最合适的字段属性 Mysql是一种关系型数据库&#xff0c;可以很好地支持大数据量的存储&#xff0c;但是一般来说&#xff0c;数据库中的表越小&#xff0c;在它上面执行的查询也就越快。因此&#xff0c;在创建表的时候&#xff0c;为了获得更好的性能&#xff0c;我们可…

sql优化常用的几种方法,19种最有效的sql优化技巧

sql优化常用的几种方法&#xff0c;19种最有效的sql优化技巧 本文我们来谈谈项目中常用的MySQL优化方法&#xff0c;共19条&#xff0c;具体如下&#xff1a; 1、EXPLAIN 做MySQL优化&#xff0c;我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例&#xff0c;标注&am…

15个常用的sql优化技巧

原文&#xff1a;https://www.cnblogs.com/12lisu/p/15535940.html 作者&#xff1a;苏三说技术 前言 sql优化是一个大家都比较关注的热门话题&#xff0c;无论你在面试&#xff0c;还是工作中&#xff0c;都很有可能会遇到。 如果某天你负责的某个线上接口&#xff0c;出现…

TiDB数据库要点及练习

TiDB Server 处理客户端的连接 SQL语句的解析和编译 关系数据库与KV的转化 SQL语句的执行 执行oline DDL 垃圾回收 热点小表缓存V6.0 TiKV 数据持久化 副本的强一致性和高可用性 MVCC&#xff08;多版本并发控制&#xff09; 分布式事务支持 Coprocessor&#xff0…

【TIDB】TIDB数据类型详解

TIDB的数据类型 文章目录 TIDB的数据类型1 数值类型2 日期和时间类型3 字符串类型3 SET 类型4 JSON类型 1 数值类型 1 整数类型 2 浮点类型 3 定点类型 decamal(20,6) 2 日期和时间类型 3 字符串类型 1 CHAR 类型 定长字符串。CHAR 列的长度固定为创建表时声明的长度。当保…

TiDB 的现在和未来

本文根据黄东旭在 PingCAP D 轮融资线上发布会的演讲实录进行整理。 TiDB 的现在和未来 大家好&#xff0c;我是黄东旭&#xff0c;是 PingCAP 的联合创始人和 CTO&#xff0c;这是 PingCAP 成立以来的第一次发布会&#xff0c;我想跟大家简单聊聊 TiDB 在产品和技术上的更新。…

TiDB Cloud

TiDB Cloud 为什么选择TiDB 分布式数据库-多租户混合工作负载-在同一个数据库中 事务型&#xff1a;基于行的数据分析型&#xff1a;基于列的数据 弹性比例&#xff1a; 缩小-减少节点横向扩展-添加节点 基于“RAFT”的高可用性 每个数据段的3个可用区进行复制 多租户 什么…

TiDB整体架构详解、TiDB核心特性——水平扩展、高可用

TiDB 集群主要包括三个核心组件&#xff1a;TiDB Server&#xff0c;PD Server 和 TiKV Server。此外&#xff0c;还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 TiDB Server TiDB Server 负责接收 SQL 请求&#xff0c…

TiDB(2):TiDB架构特性

1 TiDB 整体架构 TiDB 集群主要包括三个核心组件&#xff1a;TiDB Server&#xff0c;PD Server 和 TiKV Server。此外&#xff0c;还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 1.1 TiDB Server TiDB Server 负责接收…

TiDB使用总结

使用场景 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库&#xff0c;是一款同时支持在线事务处理(OLTP)与在线分析处理 (HTAP) 的融合型分布式数据库产品&#xff0c;具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协…

猿创征文|分布式国产数据库 TiDB 从入门到实战

写在前面 本文讲解的是目前欢迎程度最高分布式国产数据库 TiDB&#xff0c;详细讲解了 TiDB 的由来、架构、SQL 基本操作、SpringBoot 整合 TiDB 等内容。 目录 写在前面一、概述二、与 MySQL 兼容性对比三、安装使用四、SQL 基本操作4.1、库操作4.2、表操作4.3、索引操作4.4、…

猿创征文 | 国产数据库TiDB架构特性

前言 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库&#xff0c;是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品&#xff0c;具备水平扩容或者缩容、金融级高可用、实时 HTAP、云…

数据库必知必会:TiDB(12)TiDB连接管理

数据库必知必会&#xff1a;TiDB&#xff08;12&#xff09;TiDB连接管理 TiDB连接管理TiDB的连接特性连接TiDBMySQL命令行客户端图形界面客户端连接其他连接方式 写在后面 TiDB连接管理 TiDB的连接特性 TiDB Server主要负责接收用户的会话请求&#xff0c;接收SQL并负责SQL语…

TiDB 数据库的存储

本文主要介绍 TiKV 的一些设计思想和关键概念。 Key-Value Pairs&#xff08;键值对&#xff09; 作为保存数据的系统&#xff0c;首先要决定的是数据的存储模型&#xff0c;也就是数据以什么样的形式保存下来。TiKV 的选择是 Key-Value 模型&#xff0c;并且提供有序遍历方法…

TiDB-新一代数据库入门介绍

由于目前的项目计划把MySQL换成TiDB&#xff0c;所以特意来了解下TiDB。其实也不能说换&#xff0c;由于TiDB和MySQL几乎完全兼容&#xff0c;所以我们的程序可以没有任何改动就完成数据库从MySQL到TiDB的转换。接下来了解一下TiDB&#xff0c;为将来的技术选型做个准备。 一、…