Hystrix 配置项讲解(二)

1. 前言

在上一篇文章中,我们对 Hystrix 的基础配置项,即 Hystrix 与 Spring Cloud 整合后,内置的 Hystrix 配置项做了详细的介绍,这些配置项是我们结合 Spring Cloud 使用 Hystrix 的基础内容,我们只有在了解了 Spring Cloud 都提供了哪些内置的 Hystrix 配置注解之后,才能很灵活的去应用 Hystrix 。

在了解了 Hystrix 的基础配置之后,我们还需要对其他常用的 Hystrix 配置项有所了解。本节会结合 Hystrix 官网列出的配置参数,结合 Spring Cloud 框架,来为大家介绍 Hystrix 的其他配置内容。

本节主要内容:

  • Hystrix 其他配置项概览;

  • Hystrix 常用其他配置参数详解。

2. Hystrix 其他配置项概览

结合 Hystrix 官网给出的说明,Hystrix 的其他配置项可分为 3 大模块,它们分别是公共配置模块、命令合并配置模块、线程池配置模块。

在这三大模块中,命令合并配置模块、线程池配置模块下没有其他的子项配置内容,也就是说,命令合并配置模块下,所有的配置项都只配置命令合并;线程池配置模块下,所有的配置项都只对线程池进行配置。而公共配置模块中就包含了很多子项的配置,它们的关系如下图所示:

Hystrix 公共配置模块概览

在这三个模块中,我会挑选其中常用的属性参数来为大家介绍,至于那些在实际工作中很少用或者基本使用不到的属性,这里就不做介绍了。

3. Hystrix 常用其他配置参数详解

3.1 公共配置模块详解

根据上述公共配置模块的分类图可知,在公共配置模块中分为了很多子项配置,但是这些子项配置并不是都需要我们进行掌握,有的配置我们只需要简单了解即可。

接下来就让我们来看一下,在公共配置模块的各项子配置中,都有哪些参数是经常使用的吧。

执行参数配置

参数名称:execution.isolation.strategy

参数说明:该参数是用来配置 Hystrix 的隔离策略,有两种模式可供选择,分别是线程隔离模式、信号量隔离模式,默认情况下, Hystrix 被配置为了线程隔离模式,这也是 Hystrix 官网推荐的默认配置。

参数名称:execution.timeout.enabled

参数说明:该参数是用来配置,Hystrix 的执行是否支持延迟,即配置 Hystrix 执行的延时时间,默认是启用延迟时间。

参数名称:execution.isolation.thread.interruptOnTimeout

参数说明:该参数是用来配置,当 Hystrix 的执行超过了我们设置的延迟时间时,是否会中断当前线程的执行,默认是启用该中断效果。

参数名称:execution.isolation.semaphore.
maxConcurrentRequests

参数说明:该参数只在当 Hystrix 的隔离策略被设置为信号量隔离模式时才会生效,即配置 Hystrix 执行所允许的最大请求数量,当请求数量超过了最大请求数量时,那么后续的请求将被拒绝,不再处理。该配置的默认最大请求数量为 10 。

降级参数配置

参数名称:fallback.isolation.semaphore.
maxConcurrentRequests

参数说明:该参数只在当 Hystrix 的降级策略被配置为 semaphore 信号量模式下才会生效,即配置请求降级方法的最大请求数量,当请求的数量达到最大请求数量时,如果配置了降级方法,则请求会打到对应的降级方法上,且后续的请求都会被拒绝;如果没有配置降级方法,则会抛出异常。该属性的默认最大请求数量为 10 。

参数名称:fallback.enabled

参数说明:该参数就是用来配置,服务降级是否开启,默认为开启。

熔断参数配置

参数名称:circuitBreaker.enabled

参数说明:该参数就是用来配置,服务熔断是否开启,默认为开启。

参数名称:circuitBreaker.requestVolumeThreshold

参数说明:该参数是用来设置,启用服务熔断的最少请求数量,例如:我们设置该属性的值为 10 ,此时,只有 9 个请求需要处理,那么我们配置的服务熔断也是未启用状态。该属性的默认值为 20 。

参数名称:circuitBreaker.errorThresholdPercentage

参数说明:该参数是用来配置启用服务熔断的请求出错比例,例如:当我们设置该属性的值为 50% 时,在有 20 个请求需要处理的场景下,有 10 个请求错误,那么此时就会启用服务熔断。该属性的默认值为 50 。

参数名称:circuitBreaker.forceOpen

参数说明:该参数时用来配置服务熔断的打开状态,如果该属性被设置为 true ,则表示服务熔断将会一直启用,那么再有请求过来时,则不会处理任何请求,即断路器一直会拒绝所有的请求。该属性的默认值为 false 。

参数名称:circuitBreaker.forceClosed

参数说明:该参数的作用与 forceOpen 属性正好相反,该属性是设置服务熔断的关闭状态,如果该属性被设置为 true ,则断路器会一直处于关闭状态,会处理所有打过来的请求,无视请求错误率。该属性的默认值为 false 。

监控参数配置

对于 Hystrix 监控参数 Metrics 的相关配置项,由于太过抽象,所以这里就先不做介绍了,后续我们在介绍 Hystrix 监控面板的时候再做介绍。

请求上下文参数配置

参数名称:requestCache.enabled

参数说明:该参数的作用就是配置请求缓存的使用状态,默认为 true ,即使用请求缓存。

参数名称:requestLog.enabled

参数说明:该参数的作用就是配置请求日志的使用状态,默认为 true ,即使用请求日志。

3.2 命令合并配置模块详解

参数名称:maxRequestsInBatch

参数说明:该参数就是用来设置可以合并的最大请求数量,默认值为 Integer.MAX_VALUE 。

参数名称:timerDelayInMilliseconds

参数说明:该参数是用来设置请求合并到执行请求合并之间的间隔时间,默认值为 10 毫秒。

参数名称:requestCache.enabled

参数说明:该参数是用来设置,请求合并是否要写进请求缓存中去,默认为 true ,即写进请求缓存中。

3.3 线程池配置模块详解

参数名称:coreSize

参数说明:该属性用来设置核心线程池的大小,默认为 10 。

参数名称:maximumSize

参数说明:该属性是用来设置线程池的最大线程数量,默认为 10 ,在 1.5.9 版本之前,线程池的核心线程数量总是与线程池的最大线程数量保持一致。

参数名称:allowMaximumSizeToDivergeFromCoreSize

参数说明:该属性是用来设置,是否启用 maximumSize ,即设置线程池的 coreSize 和 maximumSize 的值不一致,当被设置为 true 时,该属性生效,即线程池的最大线程数量大于或等于线程池的核心线程数量。该属性的默认值为 false 。

参数名称:keepAliveTimeMinutes

参数说明:该参数是用来设置线程的存活时间,即在线程池的核心线程数量小于线程池的最大线程数量时,一个线程的可运行时长。该属性的默认值为 1 分钟。

4. 小结

本节内容概览

本小节通过图文并茂的方式,为大家介绍了 Hystrix 的其他配置项,这些配置项并不像 Hystrix 基础配置项那样重要,但是在实际 Hystrix 配置使用中,也扮演着比较重要的角色,同学们要对这些配置项有简单的了解才行。