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
原文链接
- Github Page:http://throwable.club/2019/05/29/framework-hystrix-full-configuration
- Coding Page:http://throwable.coding.me/2019/05/29/framework-hystrix-full-configuration
(本文完 e-a-201890602 1:00 AM c-3-d)
Hystrix完整配置列表的更多相关文章
- SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)
1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的 ...
- [Nginx]Nginx的基本配置与优化1(完整配置示例与虚拟主机配置)
---------------------------------------------------------------------------------------- 完整配置示例: [ n ...
- [转载]Mybatis Generator最完整配置详解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...
- thinkphp 完整配置config.php
ThinkPHP的系统配置都采用数组形式,配置文件地址:Bin/Conf/config.php CHECK_FILE_CASE -- windows环境下面的严格检查大小写. /* 项目设定 ...
- 夺命雷公狗ThinkPHP项目之----企业网站18之网站配置列表页的完成
我们点击下配置列表即可查看我们列表页的配置信息了: 其实这个最简单了,首先我们先来完成他控制器的代码: public function lists(){ $mod = M('Conf')->se ...
- Nginx完整配置配置样例【官方版】
我们主要参考nginx官方给出的完整配置的样例: https://www.nginx.com/resources/wiki/start/topics/examples/full/# 完整摘录如下: n ...
- Hystrix参数配置
1.Hystrix参数配置文档 2.Hystrix参数配置示例 import org.springframework.beans.factory.annotation.Autowired; impo ...
- nginx.conf 集群完整配置
###############################nginx.conf 集群完整配置############################### #user nobody; # user ...
- java ant 编译打包build.xml完整配置范例
java ant 编译打包build.xml完整配置范例 <?xml version="1.0" encoding="UTF-8" ?> <p ...
随机推荐
- Spark执行流程(转)
原文地址:http://blog.jobbole.com/102645/ 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使 ...
- django-模板之自定义模板路径(一)
一般情况下我们的模板路径是位于app下的templates,我们可以根据实际情况自己定义模板的路径. 我们在与app的同级目录下建立一个templates,并在settings.py中进行路径配置. ...
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ubuntu18.04 flink-1.9.0 Standalone集群搭建
集群规划 Master JobManager Standby JobManager Task Manager Zookeeper flink01 √ √ flink02 √ √ flink03 √ √ ...
- expect实现自动输入密码功能
系统: Ubuntu:16.04 安装expect: sudo apt-get update sudo apt-get install expect 脚本实例: //这一行告诉操作系统脚本里的代码使用 ...
- flask插件之flask_session会话机制
flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis:保存数据的一 ...
- redis面试题及答案
1. Redis有哪些数据结构? 2. 使用过Redis分布式锁么,它是什么回事? 3. 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来? ...
- Java HashSet对txt文本内容去重(统计小说用过的字或字数)
Java HashSet对txt文本内容去重(统计小说用过的字或字数) 基本思路: 1.字节流读需要去重的txt文本.(展示demo为当前workspace下名为utf-8.txt的文本) 2.对读取 ...
- 中文¥乱码 vue js
/** * * 中文¥格式化,返回格式化后的¥100.00 * @param {any} money */utils.formatCNY = function (money) { let format ...
- [考试反思]0820NOIP模拟测试27:幻影
注:某让我把“傻孩子”三个字全部删掉了语法不通之处自行脑补(这句本身就语法不通) skyhAK 我和以及milk_feng220 还真的没有考虑过如果我考前3的话这个颜色该怎么表示(自从不粘排行榜以来 ...