概述
这篇文章主要介绍的是Hystrix的属相详解。当涉及到Hystrix属性配置的时候,我们可以使用两种方式。
1.通过继承的方式实现,可以使用setter对象对请求命令的属性进行设置。
2.通过注解的方式实现,只是需要@HystrixCommand中的commandProperties属性来设置。
属性的优先级
这里存在的是在属性的优先级的问题优先级由低到高的是:
1. 全局默认值:如果没有设置属性,那么这个属性就是默认值。
2. 全局配置属性:通过在配置文件中定义全局属性值,在应用启动时或者是在Spring Cloud Config和Spring Cloud Bus实现的
动态刷新配置功能的配合下,可以实现全局配置属性覆盖全局默认值。
4. 实例默认值:通过代码为实例定义的默认值。
5. 实例配置属性:通过配置文件来对指定的实例进行属性配置,可以覆盖前三个默认值,也可以使用Spring Cloud Config
和Spring Cloud Bus实现的动态刷新配置功能对具体实例配置的动态调整。
command属性
作用: 控制HystrixCommand命令的行为。
主要有五种不同类型的属性配置。
execution配置:控制的是HystrixCommand.run()方法的执行。
execution.isolation.strategy:该属性用来设置HystrixCommand.run ()执行的隔离策略,它有
如下两个选项。
THREAD:通过线程池隔离的策略。它在独立的线程上执行,并且它的并发限制受线程池中线程数量的限制。
SEMAPHORE:通过信号量隔离的策略。它在调用线程上执行,并且它的并发限制受信号量计数的限制。

execution.isolation.thread.timeoutInMilliseconds:该属性用来配置HystrixCommand执行的超时时间,单位为毫秒。当
HystrixCommand执行时间超过该配置值之后, Hystrix会将该执行命令标记为TIMEOUT并进入服务降级处理逻辑。
| 属性级别 |
默认值,配置方式,配置属性 |
| 全局默认值 |
1000毫秒 |
| 全局属性配置 |
hystrix.command.default.execution.isolation. thread.timeoutIn-Milliseconds |
| 实例默认值 |
通过HystrixCommandProperties.Setter().withExecutionTimeoutIn-Milliseconds (int value)设置, 也可通过@HystrixProperty (name=“execution.isolation.thread.timeoutInMilliseconds”, value=" 2000") |
| 实例配置属性 |
hystrix.command. HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds |
execution.timeout.enabled:该属性来配置HystrixCommand.run()的执行是否启用超时时间,默认是
true,如果是false,则execution.isolation.thread.timeOutInMilliseconds属性的配置不能生效。

execution.isolation.thread.interruptOnTimeOut:该属性来配置当HystrixCommand.run执行超时的时候是否要将他中断。

execution.isolation. semaphore.maxConcurrentRequests:当HystrixCommand的隔离策略使用信号量的时候,该属性用来配置
信号量的大小(并发请求数)。当最大并发请求数达到该设置值时,后续的请求将会被拒绝

fallback配置
这些属性是来控制HystrixCommand.getFallback()的执行,这些属性同时适用于线程池的信号量的隔离操作。
fallback.isolation.semaphore.maxConcurrentRequests:该属性用来设置从调用线程中允许HystrixCommand. getFal1back ()
方法执行的最大并发请求数。当达到最大并发请求数时,后续的请求将会被拒绝并抛出异常(因为它已经没有后续的fallback
可以被调用了)

fallback.enabled:该属性用来设置服务降级策略是否启用,如果设置为false,那么当请求失败或者拒绝发生时,将不会调用
HystrixCommand.getFalIback()。

circuitBreaker配置
下面这些是断路器的属性配置,用来控制HystrixCircuitBreaker的行为。
circuitBreakek.enabled:该属性用来确定当服务请求命令失败时,是否使用断路器来跟踪其健康指标和熔断请求。

circuitBreaker.requestVolumeThreshold:该属性用来设置在滚动时间窗中,断路器熔断的最小请求数。例如,默认该值为20的
时候,如果滚动时间窗(默认10秒)内仅收到了19个请求,即使这19个请求都失败了,断路器也不会打开。

circuitBreaker.sleepwindowInMilliseconds:该属性用来设置当断路器打开之后的休眠时间窗。休眠时间窗结束之后,会将断路
器置为“半开”状态,尝试熔断的请求命令,如果依然失败就将断路器继续设置为“打开”状态,如果成功就设置为“关闭”状态。

circuitBreaker.errorThresholdPercentage:该属性用来设置断路器打升的错误百分比条件。例如,默认值
为5000的情况下,表示在滚动时间窗中,在请求数量超过circuitBreaker.requestVolumeThreshold阈值的前提
下,如果错误请求数的百分比超过50,就把断路器设置为“打开”状态,否则就设置为“关闭"状态。


circuitBreaker. forceOpen:如果将该属性设置为true,断路器将强制进入“打开”状态,它会拒绝所有请求。该属性优先于circuitBreaker. forceclosed属性。

circuitBreaker. forceClosed:如果将该属性设置为true,断路器将强制进入“关闭”状态,它会接收所有请求。如果circuitBreaker. forceOpen属性为true,该属性不会生效。

Thread Pool 属性
该属性除了在代码中用set和配置文件配置之外,还可使用注解进行配置。可使用@HystrixCommand中的
threadPoolProperties属性来设置,比如:
MaxQueueSize:该参数用来设置线程池的最大对列大小,当设置为-1时候,线程池将使用SynchronousQueue实现的对列,
否则将使用LiknedBlockIngQueue实现的对列。
| 属性级别 |
默认值,配置方式,配置属性 |
| 全局默认值 |
-1 |
| 全局配置属性 |
hystrix.threadpool.default.maxQueuesize |
| 实例默认值 |
通过HystrixThreadPoolProperties.Setter().withMaxQueuesize (intvalue)设置, 也可通过@HystrixProperty(name="maxQueuesize"value=“10”)注解来设置 |
| 实例配置属性 |
hystrix.threadpool.HystrixThreadPoolKey.maxQueueSize |
queueSizeRejectionThreshold:该参数用来为队列设置拒绝阈值。通过该参数,即使队列没有达到最大值
也能拒绝请求。该参数主要是对LinkedBlocking-Queue队列的补充,因为LinkedBlockingQueue队列不能
动态修改它的对象大小,而通过该属性就可以调整拒绝请求的队列大小了。

metrics.rollingStats.timeInMilliseconds:该参数用来设置滚动时间窗的长度,单位为毫秒。该滚动时间窗的长度用于线程池的
指标度量,它会被分成多个“桶”来统计指标。
| 属性级别 |
默认值,配置方式,配置属性 |
| 全局默认值 |
10000 |
| 全局配置属性 |
通过HystrixThreadPoolProperties.Setter().withMetricsRolling-statisticalwindowInMilliseconds (int value)设置,也可通过@HystrixProperty(name=“metrics.rollingstats.timeInMilliseconds”, value=“10”)注解来设置 |
| 实例配置属性 |
hystrix.threadpool.HystrixThreadPoolKey.metrics.rollingstats.cimeInMilliseconds |
|
|
metrics.rollingstats.numBuckets:该参数用来设置滚动时间窗被划分成“桶”的数量。
