Spring cloud系列九 Hystrix的配置属性优先级和详解

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=...
  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值