fallback:若本接口出现未知异常,则调用fallback指定的接口。
blockHandler:若本次访问被限流或服务降级,则调用blockHandler指定的接口。
fallback
此回调是针对接口出现异常了,就进入此fallback方法,我们看一下代码。
从代码看出,只要请求http://localhost:8081/test?id=2,接口就会报异常,继而会调用fallback中的方法,走到了testFallback方法中:
在testFallback增加一个Throwable 类型的参数,可以通过这个参数来实现捕获不同的异常,从而做对应的异常处理。
外置类
fallback 函数位置是有要求的,必须和原方法在同一个类中,但在实际需求中,我们需要放在其他类中。@SentinelResource提供了通过fallbackClass指定对应的类的Class对象,添加一个static函数,否则无法解析。
创建一个FallBackService类,并定义一个static 函数;请求同一个url,效果是一样的;此好处就是业务代码类比较简洁了。
fallback中还有一个defaultFallback
defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。
若同时配置了fallback和defaultFallback,则只有 fallback 会生效。 defaultFallback 函数签名要求:返回值类型必须与原函数返回值类型一致; 方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。defaultFallback函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必须为 static 函数,否则无法解析。
blockHandler
超出流量限制的部分是否会进入到blockHandler的方法,要注意是超出流量限制的请求调用,会进入blockHandler方法。
blockHandler是针对流量超出的请求,即针对的是BlockException异常;上面的请求都包含了fallback和blockHandler,那效果应该是什么呢?在Sentinel控制台配置一下流控规则。
如果请求url的参数id值为1,如果快速在1秒内请求多次,就超出了流控的设置,进入blockHandler方法。
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
img-By75ttAz-1628140838533)]
[外链图片转存中…(img-D2sfji4d-1628140838533)]
最后,若需要完整pdf版,可以点赞本文后点击这里免费领取