sentinel学习

一、异常处理的几种方法

 

 

 

 

①.如果是对web接口添加了流控规则,

在出现异常之后,如果没有自定义的BlockExceptionHandler,就会调用默认的BlockException返回一个文本
解决方法:自己写一个BlockExceptionHandler,来处理异常,然后将BlockExceptionHandler加入到IOC容器中,在发现异常之后就会自动处理这个异常,执行BlockExceptionHandler,对异常进行处理

②如果是对使用了@SentinelResource注解的方法添加了流控规则,

在出现异常之后,首先看是否有blockHandler或者fallback进行兜底回调,如果有,就执行自定义的blockHandler或者fallback处理异常,如果没有,就直接给SpringBoot全局异常处理器进行异常的处理

 兜底回调函数:   (兜底方法的方法签名必须与原方法一致,并且多一个 BlockException 参数)

 

③如果是对OpenFeign的调用添加了流控规则,在发现异常之后,使用fallback作为兜底函数

 

示例:

 

 
 
 
 
 
 
@SentinelResource(value = "createOrder",blockHandler = "createOrderFallback")
一般是加在非controller层,  value 指定的是对应的方法名,blockHandler 指定的是发生异常后的兜底回调
 
在OpenFeign中的fallback对应的是类名,而@SentinelResource中的blockHandler和fallback对应的是方法名
(1)OpenFeign
 

 

(2)@SentinelResource注解

 

二、blockHandler 和 fallback的区别

一句话总结:

  • blockHandler:处理 Sentinel 触发的规则异常(如限流、熔断、热点参数)

    •  如果是fallback搭配BlockException的话,无法触发兜底函数

  • fallback:处理 业务方法执行过程中抛出的异常(如空指针、远程服务报错、除零等)。

Sentinel 优先触发 blockHandlerfallback 只在非规则异常时执行

口诀:

blockHandler 抗“流控”,fallback 抗“异常”。
一个应对限流,一个兜住出错。

 

三、流控规则:

①三种情况

(1)链路策略:

 

(2)关联策略可以联想以下12306卖票的情况:

当很多人抢票的时候,由于是大量在写数据库,优先写操作,此时再看车票的剩余数量,会发现一直没有变化,因为读的信息一直没有更新(猜测应该是读的缓存内容车票数量信息)

posted @ 2025-07-02 18:14  连师傅只会helloword  阅读(23)  评论(0)    收藏  举报