1. 概述
本文对Hystrix的配置参数的覆盖优先级,可配置参数的种类、配置项进行详细的介绍。
Hystrix可以配置属性的有以下类型:
- Execution:控制HystrixCommand.run() 的如何执行
- Fallback: 控制HystrixCommand.getFallback() 如何执行
- Circuit Breaker: 控制断路器的行为
- Metrics: 捕获和HystrixCommand 和 HystrixObservableCommand 执行信息相关的配置属性
- Request Context:设置请求上下文的属性
- Collapser Properties:设置请求合并的属性
- Thread Pool Properties:设置线程池的属性
2. Hystrix参数的覆盖优先级
每个Hystrix参数都有4个地方可以配置,优先级从低到高如下,如果每个地方都配置相同的属性,则优先级高的值会覆盖优先级低的值
- 1 内置全局默认值:写死在代码里的值
- 2 动态全局默认属性:通过属性文件配置全局的值
- 3 内置实例默认值:写死在代码里的实例的值
- 4 动态配置实例属性:通过属性文件配置特定实例的值
3 Hystrix配置属性详解
Hystrix可以配置属性的有以下类型:
- Execution:控制HystrixCommand.run() 的如何执行
- Fallback: 控制HystrixCommand.getFallback() 如何执行
- Circuit Breaker: 控制断路器的行为
- Metrics: 捕获和HystrixCommand 和 HystrixObservableCommand 执行信息相关的配置属性
- Request Context:设置请求上下文的属性
- Collapser Properties:设置请求合并的属性
- Thread Pool Properties:设置线程池的属性
3.1. Execution
以下属性控制HystrixCommand.run() 的如何执行
1. execution.isolation.strategy
表示HystrixCommand.run()的执行时的隔离策略,有以下两种策略
- 1 THREAD: 在单独的线程上执行,并发请求受线程池中的线程数限制
- 2 SEMAPHORE: 在调用线程上执行,并发请求量受信号量计数限制
在默认情况下,推荐HystrixCommands 使用 thread 隔离策略,HystrixObservableCommand 使用 semaphore 隔离策略。
只有在高并发(单个实例每秒达到几百个调用)的调用时,才需要修改HystrixCommands 的隔离策略为semaphore 。semaphore 隔离策略通常只用于非网络调用
默认值:THREAD,
// 设置所有实例的默认值
hystrix.command.default.execution.isolation.strategy=..
// 设置实例HystrixCommandKey的此属性值
hystrix.command.HystrixCommandKey.execution.isolation.strategy=...
2. execution.isolation.thread.timeoutInMilliseconds
设置调用者执行的超时时间(单位毫秒)
默认值:1000
// 设置所有实例的默认值
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=...
// 设置实例HystrixCommandKey的此属性值
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds=...
3. execution.timeout.enabled
表示是否开启超时设置。
默认值:true
// 设置所有实例的默认值
hystrix.command.default.execution.timeout.enabled=...
// 设置实例HystrixCommandKey的此属性值
hystrix.command.HystrixCommandKey.execution.timeout.enabled=...
4. execution.isolation.thread.interruptOnTimeout
表示设置是否在执行超时时,中断HystrixCommand.run() 的执行
默认值:true
// 设置所有实例的默认值
hystrix.command.default.execution.isolation.thread.interruptOnTimeout=...
// 设置实例HystrixCommandKey的此属性值
hystrix.command.HystrixCommandKey.execution.isolation.thread.interruptOnTimeout=...