ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、fallback方法 fallback 函数用于两种场景下提供 fallback处理逻辑: * 业务上抛出运行时异常的时候 * 资源触发降级规则的时候 如:下面我们认为制造了被除数为0的异常,会执行fallback方法:pwdresetFallback给出响应结果。 ![](https://img.kancloud.cn/37/62/37620c8f12d3331eea7b8731d03a410b_1435x575.png) * 返回值类型必须与原函数返回值类型一致; * 方法参数列表需要和原函数一致,或者可以额外多一个`Throwable`类型的参数用于接收对应的异常。 ## 二、fallback与fallbackClass结合使用 fallback 函数默认需要和原方法在同一个类中。若希望将fallback函数与业务解耦,将其单独拆分到一个类中,则可以指定`fallbackClass`为对应的类的`Class`对象。 ![](https://img.kancloud.cn/a1/8a/a18a5eca24c112cc79cd166f8f8c3805_1125x200.png) * fallbackClass需要和fallback结合一起使用,注意对应的函数必需为 static 函数,否则无法解析 ~~~ public class SysuserControllerHandler { public static AjaxResponse pwdresetFallback(@RequestParam Integer userId,Throwable e) { return AjaxResponse.error(CustomExceptionType.SYSTEM_ERROR, "尊敬的客户您好,系统服务繁忙,请稍后再试!(pwdresetFallBack)"); } } ~~~ ## 三、blockHolder与fallback关系 需要特别的注意:当blockHandler和fallback方法同时定义,且**资源触发的降级规则**时候,降级处理逻辑由blockHandler来执行。**这种情况下,blockHandler优先级高于fallback方法。** ### 1.1.业务异常测试 人为制造上面代码中的被除数为0异常,通过Postman发送请求结果如下: ![](https://img.kancloud.cn/f7/4e/f74efcb87ad56255a96a279c6bff7f20_637x127.png) 执行的是fallback方法,业务上抛出运行时异常的时候由fallback方法处理。与blockHandler无关! ### 1.2.资源触发降级规则 使用jmeter测试,当降级规则被触发之后,执行的是blockHandler,而不是fallback。**这种情况下,blockHandler优先级高于fallback方法。** ![](https://img.kancloud.cn/ea/9e/ea9ef0fa84a47e0ed800b2ddae1308f9_574x125.png) 把blockHandler删除之后,再次使用jmeter测试,当降级规则被触发之后,执行的是fallback。 ![](https://img.kancloud.cn/f1/01/f10117d93476a3505363e5c6171bf9b7_682x139.png) ## 四、通用降级处理方法 `defaultFallback`(since 1.6.0):通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。 * 返回值类型必须与原函数返回值类型一致; * **方法参数列表需要为空**,或者可以额外多一个`Throwable`类型的参数用于接收对应的异常。 * defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定`fallbackClass`为对应的类的`Class`对象,注意对应的函数必需为 static 函数,否则无法解析。 ~~~ public class SysuserControllerHandler { public static AjaxResponse defaultFallback() { return AjaxResponse.error(CustomExceptionType.SYSTEM_ERROR, "尊敬的客户您好,系统服务繁忙,请稍后再试!(defaultFallback)"); } } ~~~ 只要返回值类型一致,在任何的资源上都可以使用defaultFallback,通用! ![](https://img.kancloud.cn/90/09/9009bdfaf845f5cbe8386b1b1a2dddc7_1069x228.png) **若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效**。个性化配置大于通用配置!