1. 概述

老话说的好:控制好自己的情绪,才能控制好自己的人生。冲动是魔鬼,冷静才最重要。

言归正传,之前聊了在 Feign 调用时,如何给整个 Feign接口类 增加降级策略。

今天我们来聊一下 Hystrix 关于服务降级的其他用法,也聊一下如何使用 Hystrix 实现熔断机制。

闲话不多说,直接上代码。

2. Hystrix服务降级的其他用法

2.1 为本地Service业务方法配置降级策略

在Service实现类中编写降级方法,在Service 方法上使用 @HystrixCommand 注解指定降级方法即可。

    @HystrixCommand(fallbackMethod = "businessFunctionFallback")
public String businessFunction() {
throw new RuntimeException("模拟异常");
} public String businessFunctionFallback() {
return "businessFunction 降级";
}

2.2 多级降级的配置

如果降级方法也有抛异常的风险,那不防设置多级降级。

    @HystrixCommand(fallbackMethod = "exception2")
public String exception() {
System.out.println("执行 Service exception");
throw new RuntimeException("模拟异常");
} @HystrixCommand(fallbackMethod = "exception3")
public String exception2() {
System.out.println("执行 Service exception2");
throw new RuntimeException("模拟异常");
} public String exception3() {
System.out.println("执行 Service exception3");
return "fail";
}

2.3 使用注解对降级方法进行配置

可以使用注解配置服务超时时间,可以配置多项属性,逗号分隔

  @HystrixCommand(commandKey = "myTimeout", fallbackMethod = "timeoutFallback",
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
})
public String timeout(Integer timeoutSecond) {
System.out.println("调用 Service timeout");
return eurekaClientService.timeout(timeoutSecond);
}   public String timeoutFallback(Integer timeoutSecond) {
System.out.println("timeoutFallback:" + timeoutSecond);
return "timeoutFallback:" + timeoutSecond;
}

2.4 利用 commandKey,在yml文件中对某个降级方法进行配置

commandKey 是 @HystrixCommand 注解的一个属性

hystrix:
command:
myTimeout: # 根据 commandKey 设置具体方法
execution:
isolation:
thread:
timeoutInMilliseconds: 4000 # 超时时间配置

3. Hystrix实现熔断

3.1 熔断概述

熔断通常配合降级来使用,在指定的时间窗口内,请求的失败率达到设置的阈值时,就会开启熔断,直接调用降级方法,而不去调用真实的逻辑,一段时间后会尝试恢复,但如果继续失败,则会继续熔断。

3.2 熔断的配置

hystrix:
command:
default:
fallback:
enabled: true # 开启服务降级
execution:
timeout:
enabled: true # 全局超时配置
isolation:
thread:
timeoutInMilliseconds: 1000 # 超时时间配置
interruptOnTimeout: true # 超时后是否终止线程
interruptOnFutureCancel: true # 取消后是否终止线程 circuitBreaker:
enabled: true # 是否开启熔断
requestVolumeThreshold: 5 # 在时间窗口内,请求数量达到多少个,才判断熔断
errorThresholdPercentage: 50 # 失败百分比
sleepWindowInMilliseconds: 15000 # 进入熔断后,多少ms后进入半开状态,会尝试发送请求,失败继续熔断,成功则正常提供服务
metrics:
rollingStats:
timeInMilliseconds: 20000 # 配置时间窗口的时间间隔,单位ms

4. 综述

今天聊了一下 服务降级的其他用法与熔断 的相关知识,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

5. 个人公众号

追风人聊Java,欢迎大家关注

最新文章

  1. iOS 支付宝第三方使用步骤
  2. JavaScript测试题
  3. linux下安装oracle
  4. struts2是如何加载相关的package元素节点信息的
  5. PRML读书会第六章 Kernel Methods(核函数,线性回归的Dual Representations,高斯过程 ,Gaussian Processes)
  6. jdk 1.7 在ubuntu 环境配置
  7. MySQL数据库相关命令
  8. 使用isInEditMode解决可视化编辑器无法识别自定义控件的问题
  9. 【转】Spark 体系结构
  10. 解决 Chrome 浏览器自动调整小于11px字体的问题
  11. [POJ] 3264 Balanced Lineup [线段树]
  12. iOS7支持九宫格
  13. hdu 4940 Destroy Transportation system( 无源汇上下界网络流的可行流推断 )
  14. php memcached+Mysql(主从)
  15. python3 里安装cv2
  16. HttpClient和HttpURLConnection的使用和区别
  17. 浅析Sql Server参数化查询
  18. 【转】redis 消息队列发布订阅模式spring boot实现
  19. ios-UITableView无内容时,不显示多余的分隔线
  20. linux ln链接详解

热门文章

  1. Java反序列化漏洞Apache CommonsCollections分析
  2. [AtcoderABC200E]Patisserie
  3. 洛谷P1308——单词统计
  4. Windows 11抢先体验
  5. Linux系列(10) - 命令搜索命令whereis与which
  6. WireShark基础用法
  7. CF1556D-Take a Guess【交互】
  8. bzoj#2407-探险【最短路,二进制分组】
  9. P4630-[APIO2018]Duathlon铁人两项【圆方树】
  10. CF891E-Lust【EGF】