Hystrix完整配置列表_默认值

前提

​Hystrix​​​在2018年11月20日之后已经停止维护,最后一个提交记录是:​​Latest commit 3cb2158 on 20 Nov 2018​​​,最后一个正式版本为​​1.5.18​​​。鉴于目前所在公司的技术栈是​​Spring Cloud​​​,熔断和降级组件主要用的还是​​Hystrix​​​,这里就​​Hystrix​​​的完整列表做一个分析记录,方便以后可以随时查询。本文主要参考:​​Hystrix Configuration​​​。其中,命令配置是针对​​HystrixCommand​​,主要包括命令执行(execution)配置、命令降级(fallback)配置、熔断器(circuit breaker)配置、度量统计(metrics)配置和请求上下文配置。

HystrixCommandKey、HystrixCommandGroupKey和HystrixThreadPoolKey

​HystrixCommandKey​​​、​​HystrixCommandGroupKey​​​和​​HystrixThreadPoolKey​​​三个KEY是​​HystrixCommand​​的重要标识。下面分别分析一下它们的含义。

HystrixCommandKey

​HystrixCommandKey​​​是​​Hystrix​​​命令的唯一标识,准确来说是​​HystrixCommand​​​实例或者​​HystrixObservableCommand​​实例的唯一标识。它是必须的,如果不自定义配置,它会通过下面方式确定默认值:

[HystrixCommand或者HystrixObservableCommand的具体子类].getClass().getSimpleName();

编程式配置如下:

HystrixCommandKey.Factory.asKey("Your Key");


public Command() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("Group Key"))
.andCommandKey(HystrixCommandKey.Factory.asKey("Command Key")));
}

注意一点:大部分​​Hystrix​​​的配置都是和​​HystrixCommandKey​​​绑定,所以​​HystrixCommandKey​​是比较重要的。

HystrixCommandGroupKey

​HystrixCommandGroupKey​​​是用于对​​Hystrix​​​命令进行分组,分组之后便于统计展示于仪表盘、上传报告和预警等等,也就是说,​​HystrixCommandGroupKey​​​是​​Hystrix​​​内部进行度量统计时候的分组标识,数据上报和统计的最小维度就是分组的KEY。​​HystrixCommandGroupKey​​是必须配置的,配置方式如下:

HystrixCommandGroupKey.Factory.asKey("Group Key")

public Command() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("Group Key")));
}

HystrixThreadPoolKey

​HystrixThreadPoolKey​​​主要标识用于监控、度量和缓存等等作用的​​HystrixThreadPool​​​实例。一个​​HystrixCommand​​​会和一个独立的​​HystrixThreadPool​​​实例关联,也就是说一类​​HystrixCommand​​​总是在同一个​​HystrixThreadPool​​​实例中执行。如果不显式配置​​HystrixThreadPoolKey​​​,那么会使用​​HystrixCommandGroupKey​​​的值去配置​​HystrixThreadPoolKey​​​。​​HystrixThreadPoolKey​​的配置方式如下:

HystrixThreadPoolKey.Factory.asKey("ThreadPoolKey")

public Command() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("xxx"))
.andCommandKey(HystrixCommandKey.Factory.asKey("YYY"))
.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("ThreadPoolKey")));
}

命令执行(execution)配置

隔离策略


  • execution.isolation.strategy

隔离策略决定​​Hystrix​​命令执行的时候采用什么类型的策略进行依赖隔离。

默认值

​THREAD​​​ (见​​ExecutionIsolationStrategy.THREAD​​)

可选值

​THREAD​​​,​​SEMAPHORE​

默认全局配置

​hystrix.command.default.execution.isolation.strategy​

实例配置

​hystrix.command.[HystrixCommandKey].execution.isolation.strategy​

执行隔离策略到底选择线程池(​​THREAD​​​)还是信号量(​​SEMAPHORE​​)?文档中给出的建议是:


使用​​HystrixCommand​​​的时候建议用​​THREAD​​​策略,使用​​HystrixObservableCommand​​​的时候建议使用​​SEMAPHORE​​策略。



使用​​THREAD​​​策略让​​HystrixCommand​​在线程中执行可以提供额外的保护层,以防止因为网络超时导致的延时失败。



一般情况下,只有这种特殊例子下​​HystrixCommand​​​会搭配​​SEMAPHORE​​​策略使用:调用的频次太高(例如每个实例每秒数百次调用),这种情况如果选用​​THREAD​​策略有可能导致超过线程隔离的上限(有可能需要太多的线程或者命令太多线程不足够用于隔离请求),这种情况一般是非网络请求调用。


笔者想说的是:建议选用默认值,因为目前很少遇到使用信号量隔离的场景。

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.isolation.strategy=THREAD

# 实例配置
hystrix.command.CustomCommand.execution.isolation.strategy=THREAD

是否允许超时


  • execution.timeout.enabled

决定​​HystrixCommand#run()​​执行时是否允许超时,只有设置为true的时候,下面提到的“超时时间上限”才会有效。

默认值

​true​

可选值

​true​​​,​​false​

默认全局配置

​hystrix.command.default.execution.timeout.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].execution.timeout.enabled​

建议(笔者备注)

保持选用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionTimeoutEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.timeout.enabled=true

# 实例配置
hystrix.command.CustomCommand.execution.timeout.enabled=true

超时时间上限


  • execution.isolation.thread.timeoutInMilliseconds

​HystrixCommand​​​执行时候超时的最大上限,单位是毫秒,如果命令执行耗时超过此时间值那么会进入降级逻辑。这个配置生效的前提是​​hystrix.command.default.execution.timeout.enabled​​​或者​​hystrix.command.[HystrixCommandKey].execution.timeout.enabled​​为true。

默认值

​1000​

可选值

-

默认全局配置

​hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds​

实例配置

​hystrix.command.[HystrixCommandKey].execution.isolation.thread.timeoutInMilliseconds​

建议(笔者备注)

保持选用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(1000)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000

# 实例配置
hystrix.command.CustomCommand.execution.isolation.thread.timeoutInMilliseconds=1000

超时是否中断

此配置项决定​​HystrixCommand#run()​​执行的时候调用超时的情况下是否中断。

默认值

​true​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.command.default.execution.isolation.thread.interruptOnTimeout​

实例配置

​hystrix.command.[HystrixCommandKey].execution.isolation.thread.interruptOnTimeout​

建议(笔者备注)

保持选用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionIsolationThreadInterruptOnTimeout(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.isolation.thread.interruptOnTimeout=true

# 实例配置
hystrix.command.CustomCommand.execution.isolation.thread.interruptOnTimeout=true

取消是否中断


  • execution.isolation.thread.interruptOnCancel

此配置项决定​​HystrixCommand#run()​​执行的时候取消调用的情况下是否中断。

默认值

​false​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.command.default.execution.isolation.thread.interruptOnCancel​

实例配置

​hystrix.command.[HystrixCommandKey].execution.isolation.thread.interruptOnCancel​

建议(笔者备注)

保持选用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionIsolationThreadInterruptOnFutureCancel(false)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.isolation.thread.interruptOnCancel=false

# 实例配置
hystrix.command.CustomCommand.execution.isolation.thread.interruptOnCancel=false

最大并发请求上限(SEMAPHORE)


  • execution.isolation.semaphore.maxConcurrentRequests

此配置项决定使用​​HystrixCommand#run()​​​方法和​​ExecutionIsolationStrategy.SEMAPHORE​​隔离策略下并发请求数量的最高上限。

默认值

​10​

可选值

-

默认全局配置

​hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests​

实例配置

​hystrix.command.[HystrixCommandKey].execution.isolation.semaphore.maxConcurrentRequests​

建议(笔者备注)

必须根据实际情况设定此值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE)
.withExecutionIsolationSemaphoreMaxConcurrentRequests(100)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=100

# 实例配置
hystrix.command.CustomCommand.execution.isolation.semaphore.maxConcurrentRequests=100

命令降级(fallback)配置

命令降级配置控制​​HystrixCommand#getFallback()​​​的执行逻辑,所有命令降级配置对策略​​ExecutionIsolationStrategy.THREAD​​​或者​​ExecutionIsolationStrategy.SEMAPHORE​​都生效。

最大并发降级请求处理上限


  • fallback.isolation.semaphore.maxConcurrentRequests

这个属性用于控制一个​​HystrixCommand#getFallback()​​实例方法在执行线程中调用的最大上限,如果超过此上限,降级逻辑不会执行并且会抛出一个异常。

默认值

​10​

可选值

-

默认全局配置

​hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests​

实例配置

​hystrix.command.[HystrixCommandKey].fallback.isolation.semaphore.maxConcurrentRequests​

建议(笔者备注)

必须根据实际情况设定此值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withFallbackIsolationSemaphoreMaxConcurrentRequests(20)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=20

# 实例配置
hystrix.command.CustomCommand.fallback.isolation.semaphore.maxConcurrentRequests=20

是否开启降级


  • fallback.enabled

此属性控制当​​HystrixCommand​​​执行失败之后是否调用​​HystrixCommand#getFallback()​​。

默认值

​true​

可选值

​false​​​、​​true​

默认全局配置

​hystrix.command.default.fallback.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].fallback.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withFallbackEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.fallback.enabled=true

# 实例配置
hystrix.command.CustomCommand.fallback.enabled=true

断路器(circuit breaker)配置

断路器配置用于控制​​HystrixCircuitBreaker​​实例的行为。

是否启用断路器


  • circuitBreaker.enabled

此属性确定断路器是否用于跟踪健康状况,以及当断路器打开的时候是否用于短路请求(使请求快速失败进入降级逻辑)。

默认值

​true​

可选值

​false​​​、​​true​

默认全局配置

​hystrix.command.default.circuitBreaker.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.enabled=true

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.enabled=true

断路器请求量阈值


  • circuitBreaker.requestVolumeThreshold

此属性设置将使断路器打开的滑动窗口中的最小请求数量。

例如,如果值是20,那么如果在滑动窗口中只接收到19个请求(比如一个10秒的窗口),即使所有19个请求都失败了,断路器也不会打开。

默认值

​20​

可选值

-

默认全局配置

​hystrix.command.default.circuitBreaker.requestVolumeThreshold​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.requestVolumeThreshold​

建议(笔者备注)

建议保持默认值,如果部分接口不能容忍默认阈值可以单独配置

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerRequestVolumeThreshold(10)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.requestVolumeThreshold=10

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.requestVolumeThreshold=10

断路器等待窗口时间


  • circuitBreaker.sleepWindowInMilliseconds

此属性设置断路器打开后拒绝请求的时间量,每隔一段时间(​​sleepWindowInMilliseconds​​,单位是毫秒)允许再次尝试(也就是放行一个请求)确定是否应该关闭断路器。

默认值

​5000​

可选值

-

默认全局配置

​hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.sleepWindowInMilliseconds​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerSleepWindowInMilliseconds(5000)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.sleepWindowInMilliseconds=5000

断路器错误百分比阈值


  • circuitBreaker.errorThresholdPercentage

此属性设置一个错误百分比,当请求错误率超过设定值,断路器就会打开。

默认值

​50​

可选值

-

默认全局配置

​hystrix.command.default.circuitBreaker.errorThresholdPercentage​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.errorThresholdPercentage​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerErrorThresholdPercentage(50)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.errorThresholdPercentage=50

注意:


  • 配置项​​circuitBreaker.requestVolumeThreshold​​针对错误请求数量。
  • 配置项​​circuitBreaker.errorThresholdPercentage​​针对错误请求百分比。

是否强制打开断路器


  • circuitBreaker.forceOpen

此属性控制断路器是否强制打开,强制打开断路器会使所有请求直接进入降级逻辑,也就是包裹在​​HystrixCommand#run()​​​的逻辑不会执行。​​circuitBreaker.forceOpen​​​属性和​​circuitBreaker.forceClosed​​属性互斥。

默认值

​false​

可选值

​false​​​、​​true​

默认全局配置

​hystrix.command.default.circuitBreaker.forceOpen​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.forceOpen​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerForceOpen(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.forceOpen=true

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.forceOpen=true

是否强制关闭断路器


  • circuitBreaker.forceClosed

此属性控制断路器是否强制关闭,强制关闭断路器会导致所有和断路器相关的配置和功能都失效,​​HystrixCommand#run()​​​抛出异常会正常进入降级逻辑。​​circuitBreaker.forceClosed​​​属性和​​circuitBreaker.forceOpen​​属性互斥。

默认值

​false​

可选值

​false​​​、​​true​

默认全局配置

​hystrix.command.default.circuitBreaker.forceClosed​

实例配置

​hystrix.command.[HystrixCommandKey].circuitBreaker.forceClosed​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerForceClosed(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.circuitBreaker.forceClosed=true

# 实例配置
hystrix.command.CustomCommand.circuitBreaker.forceClosed=true

度量统计(metrics)配置

度量统计配置会对​​HystrixCommand​​​或者​​HystrixObservableCommand​​执行时候的统计数据收集动作生效。

滑动窗口持续时间


  • metrics.rollingStats.timeInMilliseconds

默认值

​10000​

可选值

-

默认全局配置

​hystrix.command.default.metrics.rollingStats.timeInMilliseconds​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingStats.timeInMilliseconds​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingStatisticalWindowInMilliseconds(10000)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=10000

# 实例配置
hystrix.command.CustomCommand.metrics.rollingStats.timeInMilliseconds=10000

滑动窗口Bucket总数


  • metrics.rollingStats.numBuckets

默认值

​10​

可选值

需要满足​​metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0​​,要尽量小,否则有可能影响性能

默认全局配置

​hystrix.command.default.metrics.rollingStats.numBuckets​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingStats.numBuckets​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingStatisticalWindowBuckets(100)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingStats.numBuckets=10

# 实例配置
hystrix.command.CustomCommand.metrics.rollingStats.numBuckets=10

是否启用百分数计算


  • metrics.rollingPercentile.enabled

默认值

​true​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.command.default.metrics.rollingPercentile.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingPercentile.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingPercentileEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingPercentile.enabled=true

# 实例配置
hystrix.command.CustomCommand.metrics.rollingPercentile.enabled=true

百分数计算使用的滑动窗口持续时间


  • metrics.rollingPercentile.timeInMilliseconds

默认值

​60000​

可选值

-

默认全局配置

​hystrix.command.default.metrics.rollingPercentile.timeInMilliseconds​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingPercentile.timeInMilliseconds​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingPercentileWindowInMilliseconds(60000)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingPercentile.timeInMilliseconds=60000

# 实例配置
hystrix.command.CustomCommand.metrics.rollingPercentile.timeInMilliseconds=60000

百分数计算使用的Bucket总数


  • metrics.rollingPercentile.numBuckets

默认值

​6​

可选值

满足​​metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0​​,要尽量小,否则有可能影响性能

默认全局配置

​hystrix.command.default.metrics.rollingPercentile.numBuckets​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingPercentile.numBuckets​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingPercentileWindowBuckets(6)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingPercentile.numBuckets=6

# 实例配置
hystrix.command.CustomCommand.metrics.rollingPercentile.numBuckets=6

百分数计算使用的Bucket容量


  • metrics.rollingPercentile.bucketSize

默认值

​100​

可选值

-

默认全局配置

​hystrix.command.default.metrics.rollingPercentile.bucketSize​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.rollingPercentile.bucketSize​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsRollingPercentileBucketSize(100)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.rollingPercentile.bucketSize=100

# 实例配置
hystrix.command.CustomCommand.metrics.rollingPercentile.bucketSize=100

健康状态快照收集的周期


  • metrics.healthSnapshot.intervalInMilliseconds

默认值

​500​

可选值

-

默认全局配置

​hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds​

实例配置

​hystrix.command.[HystrixCommandKey].metrics.healthSnapshot.intervalInMilliseconds​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withMetricsHealthSnapshotIntervalInMilliseconds(500)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds=500

# 实例配置
hystrix.command.CustomCommand.metrics.healthSnapshot.intervalInMilliseconds=500

请求上下文配置

请求上下文属性主要涉及到​​HystrixRequestContext​​​和​​HystrixCommand​​的使用。

是否启用请求缓存


  • requestCache.enabled

默认值

​true​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.command.default.requestCache.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].requestCache.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withRequestCacheEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.requestCache.enabled=true

# 实例配置
hystrix.command.CustomCommand.requestCache.enabled=true

是否启用请求日志


  • requestLog.enabled

默认值

​true​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.command.default.requestLog.enabled​

实例配置

​hystrix.command.[HystrixCommandKey].requestLog.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withRequestLogEnabled(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.command.default.requestLog.enabled=true

# 实例配置
hystrix.command.CustomCommand.requestLog.enabled=true

请求合成器配置

请求合成器配置主要控制​​HystrixCollapser​​的行为。

请求合成的最大批次量


  • maxRequestsInBatch

默认值

​Integer.MAX_VALUE​

可选值

-

默认全局配置

​hystrix.collapser.default.maxRequestsInBatch​

实例配置

​hystrix.collapser.[HystrixCollapserKey].maxRequestsInBatch​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomHystrixCollapser extends HystrixCollapser<List<String>, String, String> {

public CustomHystrixCollapser(Setter setter) {
super(Setter.withCollapserKey(HystrixCollapserKey.Factory.asKey("CustomHystrixCollapser"))
.andCollapserPropertiesDefaults(HystrixCollapserProperties.Setter()
.withMaxRequestsInBatch(10)));
}

@Override
public String getRequestArgument() {
return null;
}

@Override
protected HystrixCommand<List<String>> createCommand(Collection<CollapsedRequest<String, String>> collapsedRequests) {
return null;
}

@Override
protected void mapResponseToRequests(List<String> batchResponse, Collection<CollapsedRequest<String, String>> collapsedRequests) {

}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.collapser.default.maxRequestsInBatch=10

# 实例配置
hystrix.collapser.CustomHystrixCollapser.maxRequestsInBatch=10

延迟执行时间


  • timerDelayInMilliseconds

默认值

​10​

可选值

-

默认全局配置

​hystrix.collapser.default.timerDelayInMilliseconds​

实例配置

​hystrix.collapser.[HystrixCollapserKey].timerDelayInMilliseconds​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomHystrixCollapser extends HystrixCollapser<List<String>, String, String> {

public CustomHystrixCollapser(Setter setter) {
super(Setter.withCollapserKey(HystrixCollapserKey.Factory.asKey("CustomHystrixCollapser"))
.andCollapserPropertiesDefaults(HystrixCollapserProperties.Setter()
.withTimerDelayInMilliseconds(10)));
}

@Override
public String getRequestArgument() {
return null;
}

@Override
protected HystrixCommand<List<String>> createCommand(Collection<CollapsedRequest<String, String>> collapsedRequests) {
return null;
}

@Override
protected void mapResponseToRequests(List<String> batchResponse, Collection<CollapsedRequest<String, String>> collapsedRequests) {

}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.collapser.default.timerDelayInMilliseconds=10

# 实例配置
hystrix.collapser.CustomHystrixCollapser.timerDelayInMilliseconds=10

是否启用请求合成缓存


  • requestCache.enabled

默认值

​true​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.collapser.default.requestCache.enabled​

实例配置

​hystrix.collapser.[HystrixCollapserKey].requestCache.enabled​

建议(笔者备注)

建议保持默认值

编程式配置:

public class CustomHystrixCollapser extends HystrixCollapser<List<String>, String, String> {

public CustomHystrixCollapser(Setter setter) {
super(Setter.withCollapserKey(HystrixCollapserKey.Factory.asKey("CustomHystrixCollapser"))
.andCollapserPropertiesDefaults(HystrixCollapserProperties.Setter()
.withTimerDelayInMilliseconds(10)));
}

@Override
public String getRequestArgument() {
return null;
}

@Override
protected HystrixCommand<List<String>> createCommand(Collection<CollapsedRequest<String, String>> collapsedRequests) {
return null;
}

@Override
protected void mapResponseToRequests(List<String> batchResponse, Collection<CollapsedRequest<String, String>> collapsedRequests) {

}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.collapser.default.requestCache.enabled=true

# 实例配置
hystrix.collapser.CustomHystrixCollapser.requestCache.enabled=true

线程池配置

​Hystrix​​​使用的是JUC线程池​​ThreadPoolExecutor​​​,线程池相关配置直接影响​​ThreadPoolExecutor​​​实例。​​Hystrix​​​的命令执行选用了线程池策略,那么就是通过线程池隔离执行的,最好为每一个分组设立独立的线程池。笔者在生产实践的时候,一般把​​HystrixCommandGroupKey​​​和​​HystrixThreadPoolKey​​设置为一致。

核心线程数


  • coreSize

默认值

​10​

可选值

-

默认全局配置

​hystrix.threadpool.default.coreSize​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].coreSize​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withCoreSize(10)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.coreSize=10

# 实例配置
hystrix.threadpool.CustomCommand.coreSize=10

最大线程数


  • maximumSize

此属性只有在​​allowMaximumSizeToDivergeFromCoreSize​​​为​​true​​的时候才生效。

默认值

​10​

可选值

-

默认全局配置

​hystrix.threadpool.default.maximumSize​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].maximumSize​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withMaximumSize(10)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.maximumSize=10

# 实例配置
hystrix.threadpool.CustomCommand.maximumSize=10

最大任务队列容量


  • maxQueueSize

此属性配置为-1时使用的是​​SynchronousQueue​​​,配置为大于1的整数时使用的是​​LinkedBlockingQueue​​。

默认值

​-1​

可选值

​-1​​或者大于0的整数

默认全局配置

​hystrix.threadpool.default.maxQueueSize​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].maxQueueSize​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withMaxQueueSize(-1)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.maxQueueSize=-1

# 实例配置
hystrix.threadpool.CustomCommand.maxQueueSize=-1

任务拒绝的任务队列阈值


  • queueSizeRejectionThreshold

当​​maxQueueSize​​配置为-1的时候,此配置项不生效。

默认值

​5​

可选值

大于0的整数

默认全局配置

​hystrix.threadpool.default.queueSizeRejectionThreshold​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].queueSizeRejectionThreshold​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withQueueSizeRejectionThreshold(5)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.queueSizeRejectionThreshold=5

# 实例配置
hystrix.threadpool.CustomCommand.queueSizeRejectionThreshold=5

非核心线程存活时间


  • keepAliveTimeMinutes

当​​allowMaximumSizeToDivergeFromCoreSize​​​为​​true​​​并且​​maximumSize​​​大于​​coreSize​​时此配置才生效。

默认值

​1​

可选值

大于0的整数

默认全局配置

​hystrix.threadpool.default.keepAliveTimeMinutes​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].keepAliveTimeMinutes​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withKeepAliveTimeMinutes(1)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.keepAliveTimeMinutes=1

# 实例配置
hystrix.threadpool.CustomCommand.keepAliveTimeMinutes=1

是否允许最大线程数生效


  • allowMaximumSizeToDivergeFromCoreSize

默认值

​false​

可选值

​true​​​、​​false​

默认全局配置

​hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].allowMaximumSizeToDivergeFromCoreSize​

建议(笔者备注)

根据真实情况自行配置和调整

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withAllowMaximumSizeToDivergeFromCoreSize(true)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize=true

# 实例配置
hystrix.threadpool.CustomCommand.allowMaximumSizeToDivergeFromCoreSize=true

线程池滑动窗口持续时间


  • metrics.rollingStats.timeInMilliseconds

默认值

​10000​

可选值

-

默认全局配置

​hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].metrics.rollingStats.timeInMilliseconds​

建议(笔者备注)

建议使用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withMetricsRollingStatisticalWindowInMilliseconds(10000)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds=10000

# 实例配置
hystrix.threadpool.CustomCommand.metrics.rollingStats.timeInMilliseconds=10000

线程池滑动窗口Bucket总数


  • metrics.rollingStats.numBuckets

默认值

​10​

可选值

满足​​metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0​​,值要尽量少,否则会影响性能

默认全局配置

​hystrix.threadpool.default.metrics.rollingStats.numBuckets​

实例配置

​hystrix.threadpool.[HystrixThreadPoolKey].metrics.rollingStats.numBuckets​

建议(笔者备注)

建议使用默认值

编程式配置:

public class CustomCommand extends HystrixCommand<String> {

public CustomCommand() {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomCommand"))
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withMetricsRollingStatisticalWindowBuckets(10)));
}

@Override
protected String run() throws Exception {
return null;
}
}

配置文件中(Properties)配置:

# 下面配置二选一

# 默认全局配置
hystrix.threadpool.default.metrics.rollingStats.numBuckets=10

# 实例配置
hystrix.threadpool.CustomCommand.metrics.rollingStats.numBuckets=10

(本文完 e-a-201890602 1:00 AM c-3-d)

技术公众号(《Throwable文摘》),不定期推送笔者原创技术文章(绝不抄袭或者转载):

Hystrix完整配置列表_ide_02

娱乐公众号(《天天沙雕》),甄选奇趣沙雕图文和视频不定期推送,缓解生活工作压力:

Hystrix完整配置列表_默认值_03