笔记

6、高级篇幅之深入源码剖析Hystrix降级策略和调整
    简介:源码分析Hystrix降级策略和调整

1、查看默认讲解策略 HystrixCommandProperties
        1)execution.isolation.strategy   隔离策略
            THREAD 线程池隔离 (默认)
            SEMAPHORE 信号量
                信号量适用于接口并发量高的情况,如每秒数千次调用的情况,导致的线程开销过高,通常只适用于非网络调用,执行速度快

2)execution.isolation.thread.timeoutInMilliseconds  超时时间
            默认 1000毫秒

3)execution.timeout.enabled 是否开启超时限制 (一定不要禁用)

4)execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

官方文档:
        https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy

2、调整策略
        超时时间调整

hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 4000

开始

模拟商品服务响应慢。sleep2秒

orderService调用商品服务
服务都启动正常为什么还超时了呢???这是因为feign默认的超时机制

hystrix里面本身有一个熔断降级。这里把readTimeout设置为4秒

重新调用,一样还是会出问题

光靠设置feign的超时时间是不行的,因为我们用了熔断。就需要分析hyxtrix的超时策略。
点进去@HystrixCommand这个注解


点击后左边就有对应的列表

找到HystrixCommandProperties

默认的注解的配置

构造函数里面有很多的配置项。这里我们参考官方文档
https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy
execution.isolation.strategy:隔离策略

下面看的是这个官方文档、:https://github.com/Netflix/Hystrix/wiki
一个服务调用其他关联的服务

如果某一天I服务特别慢,那么所有的请求都堆积到这里了

tomcat是有线程池的,所有的线程都会在这里卡主,别的请求进不来。导致整个系统不可用

1千个线程池平均分配没个请求250个 ,当有请求卡主的服务最多只能调用250个线程。其他的线程还可以使用。不会都卡在这一个服务里面,这样就是线程池隔离。

回到HystrixCommandProperties

默认策略点进去:Default_executionIsolationsStrategy




默认的策略是线程。

一个是线程一个是信号量

超时时间

execution.timeout.enabled 
搜索关键字

对应的值在这里。默认是1000毫秒,也就是1秒。

execution.timeout.enabled 是否开启超时限制 (一定不要禁用)
任何一个服务一定不要关闭超时时间,一定要设置一个超时时间。
默认是开启的。任何一个服务肯定有出问题的时候,肯定不能无限的链接。链接会被耗尽

execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

官方文档搜索关键字都有对应的说明

设置

可以在入口类里面,注解上加属性CommandProperties里面设置。但是这么设置不友好。这里不用这种方式、

我们使用配置文件的方式去设置,为了解决刚才调用超时的问题
有几种方式,第一种可以直接关闭超时时间

这里的配置没什么提示,笔记内写好了直接复制过去就可以了


再次调用,超时时间已经关闭,所以这里没问题。

另外一种方式-修改超时时间


超时时间设置为4秒

测试

请求耗时2秒多

最新文章

  1. struts2中各个jar包作用
  2. Node.js API 初解读(一)
  3. Zabbix(一)--zabbix 2.4.8 安装
  4. ontouchstart
  5. js获取中国日期-农历
  6. 文件I/O之sync、fsync和fdatasync函数
  7. PHP学习心得(九)——函数
  8. 性能优化工具---sar
  9. Android使用代码消除App数据并重新启动设备
  10. Mac 安装Eclipse
  11. 关于tomcat的Unsupported major.minor version 51.0问题记录
  12. oldboy s21day12.设计商城系统,主要提供两个功能:商品管理、会员管理。
  13. 微信不支持App下载的解决方案 微信跳转打开外部浏览器下载(苹果跳转商店下载)
  14. Scrapy基础(十二)————异步导出Item数据到Mysql中
  15. 【转】fiddler抓包HTTPS请求
  16. 【AI】基本概念-准确率、精准率、召回率的理解
  17. CentOS6.9下安装python notebook
  18. Flask学习【第3篇】:蓝图、基于DBUtils实现数据库连接池、上下文管理等
  19. C# 抽象类和密闭方法
  20. thinkjs 中增加过期时间

热门文章

  1. 11_Redis_事务
  2. sql server 备份
  3. python中else与finally的总结
  4. P4145——线段树点修改&&模板题
  5. [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)
  6. 使用laravel-wechat微信支付
  7. CWnd与HWND,GetSafeHwnd()与m_hWnd
  8. [Luogu] 计算系数
  9. HDU - 5528Count a * b 数学公式推导
  10. C#中如何去掉字"/0"