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 指定的是发生异常后的兜底回调
一般是加在非controller层, value 指定的是对应的方法名,blockHandler 指定的是发生异常后的兜底回调
在OpenFeign中的fallback对应的是类名,而@SentinelResource中的blockHandler和fallback对应的是方法名
(1)OpenFeign

(2)@SentinelResource注解

二、blockHandler 和 fallback的区别
一句话总结:
-
blockHandler:处理 Sentinel 触发的规则异常(如限流、熔断、热点参数)-
![]()
如果是fallback搭配BlockException的话,无法触发兜底函数
-
-
fallback:处理 业务方法执行过程中抛出的异常(如空指针、远程服务报错、除零等)。
Sentinel 优先触发 blockHandler,fallback 只在非规则异常时执行 |
口诀:
blockHandler 抗“流控”,fallback 抗“异常”。
一个应对限流,一个兜住出错。
三、流控规则:
①三种情况

(1)链路策略:

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

浙公网安备 33010602011771号