什么是熔断

这篇文章了解什么是熔断

实现熔断降级

第一步:继续上一节的模块alibaba-sentinel-reource,修改echoService,使用@SentinelResource注解的fallback属性来指定具体的方法名即可。这里需要注意:It should not accept any parameters, and the return type should be compatible with the original method. 即该方法不能接受任何参数,并且返回值类型要与原方法相同。如下:

  1. @SentinelResource(value = "EchoService#echo2", defaultFallback = "echoFallback")
  2. public String echo2(String str) {
  3. throw new RuntimeException("echo2 抛出异常");
  4. }
  5. public String echoFallback(Throwable t) {
  6. String message;
  7. if (BlockException.isBlockException(t)) {
  8. message = "Blocked by Sentinel: " + t.getClass().getSimpleName();
  9. } else {
  10. message = "Oops, failed: " + t.getClass().getCanonicalName();
  11. }
  12. log.info(message);
  13. return message;
  14. }

新增HTTP请求/echo2,便于与/echo区分,如下:

  1. @GetMapping("echo2")
  2. public String echo2() {
  3. String str = echoService.echo2("echo: " + new Date());
  4. log.info(str);
  5. return str;
  6. }

第二步:打开Sentinel控制台,点击降级按钮,为该资源设置降级规则,这里使用异常比例策略,比例阈值设置为0.5(50%的异常率),如下图:
image.png
image.png
第三步:使用Postman测试,频繁地发起请求。在QPS>=5之后,由于这个接口一直在抛出异常,所以一定会满足熔断降级条件,这时候就会执行echoFallback方法,如下图:
image.png
同时查看日志,可以看到输出了异常信息:

  1. 2021-04-16 17:30:28.521 INFO 29770 --- [nio-8004-exec-6] com.demo.EchoService : Oops, failed: java.lang.RuntimeException

代码示例

  • Github:
  • Gitee: