什么是熔断
看这篇文章了解什么是熔断
实现熔断降级
第一步:继续上一节的模块alibaba-sentinel-reource
,修改echoService
,使用@SentinelResource
注解的fallback
属性来指定具体的方法名即可。这里需要注意:It should not accept any parameters, and the return type should be compatible with the original method.
即该方法不能接受任何参数,并且返回值类型要与原方法相同。如下:
@SentinelResource(value = "EchoService#echo2", defaultFallback = "echoFallback")
public String echo2(String str) {
throw new RuntimeException("echo2 抛出异常");
}
public String echoFallback(Throwable t) {
String message;
if (BlockException.isBlockException(t)) {
message = "Blocked by Sentinel: " + t.getClass().getSimpleName();
} else {
message = "Oops, failed: " + t.getClass().getCanonicalName();
}
log.info(message);
return message;
}
新增HTTP请求/echo2
,便于与/echo
区分,如下:
@GetMapping("echo2")
public String echo2() {
String str = echoService.echo2("echo: " + new Date());
log.info(str);
return str;
}
第二步:打开Sentinel控制台,点击降级
按钮,为该资源设置降级规则,这里使用异常比例
策略,比例阈值设置为0.5
(50%的异常率),如下图:
第三步:使用Postman测试,频繁地发起请求。在QPS>=5之后,由于这个接口一直在抛出异常,所以一定会满足熔断降级条件,这时候就会执行echoFallback
方法,如下图:
同时查看日志,可以看到输出了异常信息:
2021-04-16 17:30:28.521 INFO 29770 --- [nio-8004-exec-6] com.demo.EchoService : Oops, failed: java.lang.RuntimeException
代码示例
- Github:
- Gitee: