一、配置详解
1:设置隔离策略
所有实例:hystrix.command.default.execution.isolation.strategy=
单个实例:hystrix.command.HystrixCommandKey.execution.isolation.strategy=
THREAD(默认):在固定大小线程池中,以单独线程执行,并发请求数受限于线程池大小
SEMAPHORE:在调用线程中执行,通过信号量来限制并发量
在默认情况下,推荐HystrixCommands 使用 thread 隔离策略,HystrixObservableCommand 使用 semaphore 隔离策略。只有在高并发(单个实例每秒达到几百个调用)的调用时,才需要修改HystrixCommands 的隔离策略为semaphore 。semaphore 隔离策略通常只用于非网络调用
2:设置调用者等待命令执行的超时限制,超过此时间,HystrixCommand被标记为TIMEOUT,并执行回退逻辑
execution.isolation.thread.timeoutInMilliseconds=1000(默认1000毫秒)
3:设置执行是否有超时限制
execution.isolation.thread.interruptOnTimeout=true(默认)
4:设置HystrixCommand.run()的执行是否在超时发生时被中断
execution.isolation.thread.interruptOnTimeout=true(默认)
5:设置HystrixCommand.run()的执行在取消动作发生时候可以响应中断
execution.isolation.thread.interruptOnCancel=false(默认)
6:设置隔离策略为SEMAPHORE时允许的最大请求数
execution.isolation.semaphore.maxConcurrentRequests=10(默认)
如果达到最大并发数时,后续请求会被拒绝。信号量应该是容器(比如Tomcat)线程池一小部分,不能等于或者略小于容器线程池大小,否则起不到保护作用。
7:设置调用线程产生的HystrixCommand.getFallback()方法的允许最大请求数目
fallback.isolation.semaphore.maxConcurrentRequests=10(默认)
如果达到最大并发数目,后续请求将会被拒绝,如果没有实现回退,则抛出异常。
8:该属性决定当故障或者拒绝发生时,一个调用将会去尝试HystrixCommand.getFallback()
fallback.enabled=true(默认)
9:设置断路器是否起作用
circuitBreaker.enabled=true(默认)
10:该属性设置滚动窗口中将使断路器跳闸的最小请求数量
circuitBreaker.requestVolumeThreshold=20(默认)
如果此属性值为20,则在窗口时间内(如10s内),如果只收到19个请求且都失败了,则断路器也不会开启。
11:设置失败百分比的阈值。如果失败比率超过这个值,则断路器跳闸并且进入fallback逻辑
circuitBreaker.errorThresholdPercentage=50(默认)
12:如果设置true,则强制使断路器跳闸,则会拒绝所有的请求.此值会覆盖circuitBreaker.forceClosed的值
circuitBreaker.forceOpen=false(默认)
13:如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,无论是否失败的次数达到circuitBreaker.errorThresholdPercentage值
circuitBreaker.forceClosed=false(默认)
14:设置在回路被打开,拒绝请求到再次尝试请求并决定回路是否继续打开的时间
circuitBreaker.sleepWindowInMilliseconds=5000(默认值5000毫秒)
15:设置统计滚动窗口的时间长度
metrics.rollingStats.timeInMilliseconds=10000(默认)
16:设置统计滚动窗口的桶数量
metrics.rollingStats.numBuckets=10(默认)
注意:以下配置必须成立,否则会抛出异常。
metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0 如:10000/10、10000/20是正确的配置,但是10000/7错误的
在高并发的环境里,每个桶的时间长度建议大于100ms
17:设置执行延迟是否被跟踪,并且被计算在失败百分比中。如果设置为false,则所有的统计数据返回-1
metrics.rollingPercentile.enabled=true(默认)
18:此属性设置统计滚动百分比窗口的持续时间
metrics.rollingPercentile.timeInMilliseconds=60000(默认)
19:设置统计滚动百分比窗口的桶数量
metrics.rollingPercentile.numBuckets=6(默认)
注意:以下配置必须成立,否则会抛出异常。
metrics.rollingPercentile.timeInMilliseconds % metrics.rollingPercentile.numBuckets == 0 如: 60000/6、60000/60是正确的配置,但是10000/7错误的,在高并发的环境里,每个桶的时间长度建议大于1000ms
20:采样时间间隔
metrics.healthSnapshot.intervalInMilliseconds=500(默认)
21:是否开启请求缓存功能
requestCache.enabled =true(默认)
22:表示是否开启日志,打印执行HystrixCommand的情况和事件
requestLog.enabled=true(默认)
23:设置同时批量执行的请求的最大数量
maxRequestsInBatch=Integer.MAX_VALUE(默认)
24:批量执行创建多久之后,再触发真正的请求
timerDelayInMilliseconds=10(默认)
25:是否对HystrixCollapser.execute() 和 HystrixCollapser.queue()开启请求缓存
requestCache.enabled=true(默认)
26:设置线程池的core的大小
coreSize=10(默认)
27:设置最大的线程池的大小,只有设置allowMaximumSizeToDivergeFromCoreSize时,此值才起作用
maximumSize=10(默认)
28:设置最大的BlockingQueue队列的值
maxQueueSize=-1(默认)
如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列
29:因为maxQueueSize值不能被动态修改,所有通过设置此值可以实现动态修改等待队列长度。即等待的队列的数量大于queueSizeRejectionThreshold时(但是没有达到maxQueueSize值),则开始拒绝后续的请求进入队列。
queueSizeRejectionThreshold=5(默认)如果设置-1,则属性不启作用
30:设置线程多久没有服务后,需要释放(maximumSize-coreSize )个线程
keepAliveTimeMinutes=1(默认)
31:设置allowMaximumSizeToDivergeFromCoreSize值为true时,maximumSize才有作用
allowMaximumSizeToDivergeFromCoreSize=false(默认)
32:设置滚动窗口的时间
metrics.rollingStats.timeInMilliseconds=10000(默认)
33:设置滚动静态窗口分成的桶的数量
metrics.rollingStats.numBuckets=10(默认)
配置的值必须满足如下条件:
metrics.rollingStats.timeInMilliseconds % metrics.rollingStats.numBuckets == 0
建议每个桶的时间长度大于100ms
二、配置案例
1:THREAD模式
hystrix:
threadpool:
default:
coreSize: 200 ##并发执行的最大线程数,默认10
maxQueueSize: 200 ##BlockingQueue的最大队列数
queueSizeRejectionThreshold: 50
##即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝
execution:
timeout:
enabled: true
isolation:
strategy: THREAD
semaphore:
maxConcurrentRequests: 1000
thread:
timeoutInMilliseconds: 30000
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 5000
2:SEMAPHORE模式
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
thread:
timeoutInMilliseconds: 60000
semaphore:
maxConcurrentRequests: 1000
shareSecurityContext: true