JAVA全系列 教程
3762个小节阅读:7091.8k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
服务降级功能,但是只是限制后,返回不可控的结果肯定是不行的,我们还要保证调用者在调用那些被限制的服务时候,不管是不是被限制,都要让他们拿到一个合理的结果,而不是扔回去一个异常就完事了。
Sentinel提供了这样的功能,让我们可以另外定义一个方法来代替被限制或异常服务返回数据,这就是fallback和blockHandler。
@SentinelResource注解用于定义资源,并提供可选的 BlockException 异常处理(仅处理Sentinel控制台配置相关异常) 和 fallback 配置项(运行时异常以及自定义异常)。
value
:资源名称,必需项(不能为空)entryType
:entry 类型,可选项(默认为 EntryType.OUT
)blockHandler
/ blockHandlerClass
: blockHandler
对应处理 BlockException
的函数名称,可选项。blockHandler 函数访问范围需要是 public
,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException
。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass
为对应的类的 Class
对象,注意对应的函数必需为 static 函数,否则无法解析。fallback / fallbackClass
:fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore
里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback
(since 1.6.0):默认的 fallback 函数名称exceptionsToIgnore
(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。此回调是针对接口出现异常了,就进入此fallback方法。
xxxxxxxxxx
/**
* 根据id查询支付信息
* @param id
* @return
*/
@SentinelResource(value = "testfallback",fallback = "testFallback")
@GetMapping("findById")
public String findById(String id){
if (id.equals("1")){
throw new RuntimeException("出异常了。");
}
return iPaymentFeginService.findById(id);
}
// 降级
public String testFallback(String id,Throwable e){
return "系统异常了";
}
代码看出,只要请求http://localhost:80/order/findById?id=1 ,接口就会报异常,继而会调用fallback中的方法,走到了testFallback方法中。
fallback 函数位置是有要求的,必须和原方法在同一个类中,但在实际需求中,我们需要放在其他类中。@SentinelResource提供了通过fallbackClass指定对应的类的Class对象,添加一个static,否则无法解析。
xxxxxxxxxx
@Component
public class PaymentServiceFallback {
/**
* 降级方法
* @return
*/
public static String findByIdFallBalk(String id,Throwable e) {
return "支付系统服务繁忙稍等一会~~~~";
}
}
xxxxxxxxxx
@SentinelResource(value = "testfallback",fallbackClass = PaymentServiceFallback.class,fallback = "findByIdFallBalk")
@GetMapping("findById")
public String findById(String id){
if (id.equals("1")){
throw new RuntimeException("出异常了。");
}
return iPaymentFeginService.findById(id);
}
实时效果反馈
1.Sentinel中SentinelResource注解属性falllback处理____异常。
A 热点异常
B 限流异常
C 权限异常
D java异常
答案
1=>D