博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码
阅读量:4325 次
发布时间:2019-06-06

本文共 1836 字,大约阅读时间需要 6 分钟。

笔记

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秒多
 

转载于:https://www.cnblogs.com/wangjunwei/p/11449501.html

你可能感兴趣的文章
Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1
查看>>
seajs的使用--主要了解模块化
查看>>
Noip2018游记
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
QTcpSocket的连续发送数据和连续接收数据
查看>>
使用Gitbook来编写你的Api文档
查看>>
Python XML解析(转载)
查看>>
jquery扩展 $.fn
查看>>
tomcat 多实例的Sys V风格脚本
查看>>
程序员如何讲清楚技术方案
查看>>
MapReduce-实践1
查看>>
UVa 815 - Flooded!
查看>>
jQuery基础--选择器
查看>>
减小服务器负担,Apache启用mod_expires模块
查看>>
20.Mybatis之逆向工程
查看>>
mysql 中时间和日期函数应用
查看>>
自动化测试-selenium初始化Driver参考
查看>>
mybatis使用collection查询集合属性规则
查看>>