@Sentinel Resource注解讲解|学习笔记

简介: 快速学习@Sentinel Resource注解讲解

开发者学堂课程【全面讲解Spring Cloud Alibaba技术栈(知识精讲+项目实战)第二阶段@Sentinel Resource注解讲解】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/684/detail/11881


@Sentinel Resource 注解讲解

 

内容介绍:

一、@Sentinel Resource 的作用

二、自定义 blockHandler 和 fallback

 

一、@Sentinel Resource 的作用

1.定义一个资源。

2.定义当资源内部发生异常的时候的处理逻辑。

blockHandler 定义当资源内部发生了 BlockException 应该进入的方法(捕获的是Sentinel 定义的异常)

fallback 定义资源内部发生 Throwable 应该进入的方法。

 

二、自定义 blockHandler 和 fallback

1.自定义 blockHandler

加入 value。

@SentinelResource(

Value=”message”;

value 后加入 blockHandler,它的返回类型和参数类型必须跟原方法一致,允许在参数列表的最后加入一个参数 Blockexception,用来接收原方法中发生的异常。

Blockhandler=”blockhandler”;

)

Public string message()(

Return “message”;

)

2.自定义 fallback

与 blockHandler 的自定义方法基本一致。

要求:

1.当前方法的返回值和参数要跟原方法一致。

2.但是允许在参数列表的最后加入一个参数 BlockException,用来接收原方法中发生的异常。

Public string fallback(string name,Throwable e)(

自定义异常处理逻辑

Log.error(“触发了BlockException,内容为()”,e);

)

试着调用一下。

@sentinelResource(

Value=”message”

blockHandler=”blockHandler”;

Fallback=”fallback”

)

3.做一个测试,看看效果

在 ordercontroller 下添加一个方法。

@RequestMapping(“/order/message3”)

@SentinelResource(“/order/message3”)

Public string message3(string name,Integer age)  {

}

@RequestMapping(“/order/message”)

Public string message()  {

Return orderserviceimpl3.message(name”xx”);

) 

重新启动,重新访问,刷新 message。

image.png

4,做一个限流

找到簇点链路,给 message 加入一个流控

image.png

5.再来刷新

image.png

如果将以下过程注销掉,会发生什么?

Public string fallback(string name,Throwable e)(

自定义异常处理逻辑

Log.error(“触发了BlockException,内容为()”,e);

)

重新启动看一下效果,我们再来刷新。

 image.png

接下来再来添加一个流控。

image.png

再刷新就会发现,就会发现进入了”Throwable”这个分支。

比如,public class OrderServiceImpl3(

Int i=0;

定义一个 inch i=0,单次超出一个,就会出现运行时异常。

重新启动,启动之前将自定义异常处理逻辑打开;就会发现所有 Sentinel 的异常进入了 BlankException 的逻辑,不是 Sentinel 的异常就进入了“单次超出一个运行就异常”这个逻辑。这样就区分过来那个 Sentinel 哪个不是 Sentinel。

我们来设置一下刷新

image.png

再给 massage 一个流控再刷新,会出现 BlockException 和 Throwable,现在已经可以去分开,是否是 Sentinel 引发的异常。

为什么有了 fallback还要blockHandler呢?

用blockHandler就可以把Sentinel的所有异常都兜住,fallback中就是业务逻辑异常,通常用fallback给出解决方案也可以。那么就可以把blockHandler的这些方法移到外边。

首先,做一个类。

把这个类当作 Blockexcption 处理的类,并把其方法移动到其中去。

@slf4j

Public class orderserviceImpl3BlockHandler(

)

对应指定哪个类中的方法。

@SentinelResource(

Value=”message”

Blockhandlerclass=OrderServiceImpl3BlockHandler.class

Blockhandler=”Blockhandler”

Fallback=OrderserviceImpl3Fallback.class;

重新启动刷新,

三次就会进入 Throwable。

image.png

设置一个流控,再刷新,就会发现进入了 BlockException。

相关文章
|
6月前
|
Sentinel
sentinel的@SentinelResource注解使用
sentinel的@SentinelResource注解使用
253 0
|
6月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
799 0
|
6月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
107 0
|
6月前
|
安全 数据安全/隐私保护 Sentinel
Sentinel之力:解锁@SentinelResource注解的神奇威力
Sentinel之力:解锁@SentinelResource注解的神奇威力
123 0
|
SpringCloudAlibaba API Sentinel
SpringCloud Alibaba学习(九):Sentinel的@SentinelResource注解详解
SpringCloud Alibaba学习(九):Sentinel的@SentinelResource注解详解
169 0
SpringCloud Alibaba学习(九):Sentinel的@SentinelResource注解详解
|
监控 安全 Java
网关、Nacos 和 Sentinel|学习笔记(一)
快速学习网关、Nacos 和 Sentinel
网关、Nacos 和 Sentinel|学习笔记(一)
|
消息中间件 缓存 监控
网关、Nacos 和 Sentinel|学习笔记(三)
快速学习网关、Nacos 和 Sentinel
网关、Nacos 和 Sentinel|学习笔记(三)
|
Kubernetes 负载均衡 Cloud Native
Sentinel 2.0 :流量治理全面升级 | 学习笔记
快速学习 Sentinel 2.0 :流量治理全面升级
Sentinel 2.0 :流量治理全面升级 | 学习笔记
|
监控 Dubbo Java
Sentinel 使用入门|学习笔记
快速学习 Sentinel 使用入门
Sentinel 使用入门|学习笔记
|
Java API 开发者
Sentinel 规则持久化|学习笔记
快速学习 Sentinel 规则持久化
Sentinel 规则持久化|学习笔记