当前位置:网站首页>Hystrix使用
Hystrix使用
2022-04-21 13:37:00 【菜鸟小窝】
一、触发fallback方法
什么情况下会触发fallback方法?
| 名字 | 描述 | 触发*fallback* |
|---|---|---|
| EMIT | 值传递 | NO |
| SUCCESS | 执行完成,没有错误 | NO |
| FAILURE | 执行抛出异常 | YES |
| TIMEOUT | 执行开始,但没有在允许的时间内完成 | YES |
| BAD_REQUEST | 执行抛出HystrixBadRequestException | NO |
| SHORT_CIRCUITED | 断路器打开,不尝试执行 | YES |
| THREAD_POOL_REJECTED | 线程池拒绝,不尝试执行 | YES |
| SEMAPHORE_REJECTED | 信号量拒绝,不尝试执行 | YES |
二、fallback方法异常
fallback方法在什么情况下会抛出异常?
| 名字 | 描述 | 抛异常 |
|---|---|---|
| FALLBACK_EMIT | Fallback值传递 | NO |
| FALLBACK_SUCCESS | Fallback执行完成,没有错误 | NO |
| FALLBACK_FAILURE | Fallback执行抛出出错 | YES |
| FALLBACK_REJECTED | Fallback信号量拒绝,不尝试执行 | YES |
| FALLBACK_MISSING | 没有Fallback实例 | YES |
三、hystrix dashboard界面监控参数
四、配置信息
(default或HystrixCommandKey)最常用的几项
1、超时时间
默认1000ms,单位:ms
(1)hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
(2)hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
在调用方配置,被该调用方的指定方法(HystrixCommandKey方法名)的超时时间是该值
2、线程池核心线程数(coreSize)
hystrix.threadpool.default.coreSize(默认为10)
3、Queue
(1)hystrix.threadpool.default.maxQueueSize(最大排队长度。默认-1,使用SynchronousQueue。其他值则使用 LinkedBlockingQueue。如果要从-1换成其他值则需重启,即该值不能动态调整,若要动态调整,需要使用到下边这个配置)
(2)hystrix.threadpool.default.queueSizeRejectionThreshold(排队线程数量阈值,默认为5,达到时拒绝,如果配置了该选项,队列的大小是该队列)
注意:如果maxQueueSize=-1的话,则该选项不起作用
4、maximumSize
hystrix:
threadpool:
default:
# 线程池大小
coreSize: 20
# 最大线程池大小
maximumSize: 500
# 允许maximumSize的配置生效。默认值:false
allowMaximumSizeToDivergeFromCoreSize: true
5、断路器
(1)hystrix.command.default.circuitBreaker.requestVolumeThreshold(当在配置时间窗口内达到此数量的失败后,进行短路。默认20个)
For example, if the value is 20, then if only 19 requests are received in the rolling window (say a window of 10 seconds) the circuit will not trip open even if all 19 failed.
简言之,10s内请求失败数量达到20个,断路器开。
(2)hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds(短路多久以后开始尝试是否恢复,默认5s)
(3)hystrix.command.default.circuitBreaker.errorThresholdPercentage(出错百分比阈值,当达到此阈值后,开始短路。默认50%)
4、fallback
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests(调用线程允许请求HystrixCommand.GetFallback()的最大数量,默认10。超出时将会有异常抛出,注意:该项配置对于THREAD隔离模式也起作用)
五、属性配置参数
参数说明英文地址:https://github.com/Netflix/Hystrix/wiki/Configuration
HystrixProperty参考代码地址:http://www.programcreek.com/java-api-examples/index.php?source_dir=Hystrix-master/hystrix-contrib/hystrix-javanica/src/test/java/com/netflix/hystrix/contrib/javanica/test/common/configuration/command/BasicCommandPropertiesTest.java
1、Command Properties
以下属性控制HystrixCommand行为。
(1)Execution
以下属性控制HystrixCommand.run()如何执行。
| 参数 | 描述 | 默认值 |
|---|---|---|
| execution.isolation.strategy | 隔离策略,有THREAD和SEMAPHORETHREAD - 它在单独的线程上执行,并发请求受线程池中的线程数量的限制 SEMAPHORE - 它在调用线程上执行,并发请求受到信号量计数的限制 | 默认使用THREAD模式,以下几种场景可以使用SEMAPHORE模式:只想控制并发度外部的方法已经做了线程隔离调用的是本地方法或者可靠度非常高、耗时特别小的方法(如medis) |
| execution.isolation.thread.timeoutInMilliseconds | 超时时间 | 默认值:1000在THREAD模式下,达到超时时间,可以中断在SEMAPHORE模式下,会等待执行完成后,再去判断是否超时设置标准:有retry,99meantime+avg meantime没有retry,99.5meantime |
| execution.timeout.enabled | HystrixCommand.run()执行是否应该有超时。 | 默认值:true |
| execution.isolation.thread.interruptOnTimeout | 在发生超时时是否应中断HystrixCommand.run()执行。 | 默认值:trueTHREAD模式有效 |
| execution.isolation.thread.interruptOnCancel | 当发生取消时,执行是否应该中断。 | 默认值为falseTHREAD模式有效 |
| execution.isolation.semaphore.maxConcurrentRequests | 设置在使用时允许到HystrixCommand.run()方法的最大请求数。 | 默认值:10SEMAPHORE模式有效 |
(2)Fallback
以下属性控制HystrixCommand.getFallback()如何执行。这些属性适用于ExecutionIsolationStrategy.THREAD和ExecutionIsolationStrategy.SEMAPHORE。
| 参数 | 描述 | 默认值 |
|---|---|---|
| fallback.isolation.semaphore.maxConcurrentRequests | 设置从调用线程允许HystrixCommand.getFallback()方法的最大请求数。 | SEMAPHORE模式有效默认值:10 |
| fallback.enabled | 确定在发生失败或拒绝时是否尝试调用HystrixCommand.getFallback()。 | 默认值为true |
(3)Circuit Breaker
断路器属性控制HystrixCircuitBreaker的行为。
| 参数 | 描述 | 默认值 |
|---|---|---|
| circuitBreaker.enabled | 确定断路器是否用于跟踪运行状况和短路请求(如果跳闸)。 | 默认值为true |
| circuitBreaker.requestVolumeThreshold | 熔断触发的最小个数/10s | 默认值:20 |
| circuitBreaker.sleepWindowInMilliseconds | 熔断多少秒后去尝试请求 | 默认值:5000 |
| circuitBreaker.errorThresholdPercentage | 失败率达到多少百分比后熔断 | 默认值:50主要根据依赖重要性进行调整 |
| circuitBreaker.forceOpen | 属性如果为真,强制断路器进入打开(跳闸)状态,其中它将拒绝所有请求。 | 默认值为false此属性优先于circuitBreaker.forceClosed |
| circuitBreaker.forceClosed | 该属性如果为真,则迫使断路器进入闭合状态,其中它将允许请求,而不考虑误差百分比。 | 默认值为false如果是强依赖,应该设置为truecircuitBreaker.forceOpen属性优先,因此如果forceOpen设置为true,此属性不执行任何操作。 |
(4)Metrics
以下属性与从HystrixCommand和HystrixObservableCommand执行捕获指标有关。
| 参数 | 描述 | 默认值 |
|---|---|---|
| metrics.rollingStats.timeInMilliseconds | 此属性设置统计滚动窗口的持续时间(以毫秒为单位)。对于断路器的使用和发布Hystrix保持多长时间的指标。 | 默认值:10000 |
| metrics.rollingStats.numBuckets | 此属性设置rollingstatistical窗口划分的桶数。以下必须为true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否则将抛出异常。 | 默认值:10 |
| metrics.rollingPercentile.enabled | 此属性指示是否应以百分位数跟踪和计算执行延迟。 如果禁用它们,则所有摘要统计信息(平均值,百分位数)都将返回-1。 | 默认值为true |
| metrics.rollingPercentile.timeInMilliseconds | 此属性设置滚动窗口的持续时间,其中保留执行时间以允许百分位数计算,以毫秒为单位。 | 默认值:60000 |
| metrics.rollingPercentile.numBuckets | 此属性设置rollingPercentile窗口将划分的桶的数量。以下内容必须为true - “metrics.rollingPercentile.timeInMilliseconds%metrics.rollingPercentile.numBuckets == 0” -否则将抛出异常。 | 默认值:6 |
| metrics.rollingPercentile.bucketSize | 此属性设置每个存储桶保留的最大执行次数。如果在这段时间内发生更多的执行,它们将绕回并开始在桶的开始处重写。 | 默认值:100 |
| metrics.healthSnapshot.intervalInMilliseconds | 此属性设置在允许计算成功和错误百分比并影响断路器状态的健康快照之间等待的时间(以毫秒为单位)。 | 默认值:500 |
(5)Request Context
这些属性涉及HystrixCommand使用的HystrixRequestContext功能。
| 参数 | 描述 | 默认值 |
|---|---|---|
| requestCache.enabled | HystrixCommand.getCacheKey()是否应与HystrixRequestCache一起使用,以通过请求范围的缓存提供重复数据删除功能。 | 默认值为true |
| requestLog.enabled | HystrixCommand执行和事件是否应记录到HystrixRequestLog。 | 默认值为true |
2、Collapser Properties
下列属性控制HystrixCollapser行为。
| 参数 | 描述 | 默认值 |
|---|---|---|
| maxRequestsInBatch | 此属性设置在触发批处理执行之前批处理中允许的最大请求数。 | Integer.MAX_VALUE |
| timerDelayInMilliseconds | 此属性设置创建批处理后触发其执行的毫秒数。 | 默认值:10 |
| requestCache.enabled | 此属性指示是否为HystrixCollapser.execute()和HystrixCollapser.queue()调用启用请求高速缓存。 | 默认值:true |
3、ThreadPool Properties
以下属性控制Hystrix命令在其上执行的线程池的行为。
大多数时候,默认值为10的线程会很好(通常可以做得更小)。
| 参数 | 描述 | 默认值 |
|---|---|---|
| coreSize | 线程池coreSize | 默认值:10设置标准:qps*99meantime+breathing room |
| maximumSize | 此属性设置最大线程池大小。 这是在不开始拒绝HystrixCommands的情况下可以支持的最大并发数。 请注意,此设置仅在您还设置allowMaximumSizeToDivergeFromCoreSize时才会生效。 | 默认值:10 |
| maxQueueSize | 请求等待队列 | 默认值:-1如果使用正数,队列将从SynchronizeQueue改为LinkedBlockingQueue |
| queueSizeRejectionThreshold | 此属性设置队列大小拒绝阈值 - 即使未达到maxQueueSize也将发生拒绝的人为最大队列大小。 此属性存在,因为BlockingQueue的maxQueueSize不能动态更改,我们希望允许您动态更改影响拒绝的队列大小。 | 默认值:5注意:如果maxQueueSize == -1,则此属性不适用。 |
| keepAliveTimeMinutes | 此属性设置保持活动时间,以分钟为单位。 | 默认值:1 |
| allowMaximumSizeToDivergeFromCoreSize | 此属性允许maximumSize的配置生效。 那么该值可以等于或高于coreSize。 设置coreSize <maximumSize会创建一个线程池,该线程池可以支持maximumSize并发,但在相对不活动期间将向系统返回线程。 (以keepAliveTimeInMinutes为准) | 默认值:false |
| metrics.rollingStats.timeInMilliseconds | 此属性设置statistical rolling窗口的持续时间(以毫秒为单位)。 这是为线程池保留多长时间。 | 默认值:10000 |
| metrics.rollingStats.numBuckets | 此属性设置滚动统计窗口划分的桶数。 注意:以下必须为true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否则将引发异常。 | 默认值:10 |
4、其他
| 参数 | 描述 | 默认值 |
|---|---|---|
| groupKey | 表示所属的group,一个group共用线程池 | 默认值:getClass().getSimpleName(); |
| commandKey | 默认值:当前执行方法名 |
参考:
Hystrix使用说明,配置参数说明
http://blog.csdn.net/tongtong_use/article/details/78611225
六、Hystrix信号量和线程池
1、信号量和线程池
Java基础知识(三):Hystrix信号量 VS线程池
https://www.jianshu.com/p/b1f6112052d3Hystrix系列之信号量、线程池
https://www.jianshu.com/p/dc0410558fc9
Hystrix详解、配置、线程池等
https://blog.csdn.net/qq779446849/article/details/111479039
hystrix 线程数,超时时间设置测试
https://blog.csdn.net/xie_yu1/article/details/117653392
2、信号量线程池隔离差异
- 信号量隔离适应非网络请求,因为是同步的请求,无法支持超时,只能依靠协议本身
- 线程池隔离,即,每个实例都增加个线程池进行隔离
| 线程池隔离 | 信号量隔离 | |
|---|---|---|
| 是否支持熔断 | 支持,当线程池到达MaxSize后,再请求会触发fallback接口进行熔断 | 支持,当信号量达到maxConcurrentRequest后,再请求会触发fallback |
| 是否支持超时 | 支持,可直接返回 | 不支持,如果阻塞,只能通过调用协议 |
| 隔离原理 | 每个服务单独用线程池 | 通过信号量的计数器 |
| 是否支持异步调用 | 可以是异步,也可以是同步。看调用的方法 | 同步调用,不支持异步 |
| 资源消耗 | 大,大量线程的上下文切换,容易造成机器负载高 | 小,只是个计数器 |
网关是通过线程池隔离,同步的路由方式,适当的线程池大小配置能够防止网关负载过大
版权声明
本文为[菜鸟小窝]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_25775675/article/details/124307858
边栏推荐
- 哈夫曼編碼
- Wanzi dry goods! Help you master the knowledge of "light and shadow" in design
- If the field lines are the same, they will be merged into another field SQL statement?
- metasploit渗透
- no server suitable for synchronization found
- Chris LATTNER, father of llvm: the golden age of compilers
- Tailwind核心理念——响应式设计
- leetcode:824. 山羊拉丁文【简单字符串操纵】
- Why does MySQL driver rely on protobuf
- MySQL uses PIP and binlog2sql to install
猜你喜欢

Technology giants compete to enter, who can become the "number one player" of the meta universe?

Leetcode: countless denominations of coins get the option of amount (DP)

【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )

S: Unit gain compensation

Which brand of running headphones is good and suitable for sports

Baidu map development custom information window openinfowindow style

Réaliser l'affichage aléatoire de l'étiquette, de la taille de la police et de la couleur

3-4Dom形XSS详解以及演示
![leetcode:824. Goat Latin [simple string manipulation]](/img/03/22141a079673a37226ada3ba5bc1e3.png)
leetcode:824. Goat Latin [simple string manipulation]

Feedforward neural network
随机推荐
北京大学ACM Problems 1009:Edge Detection
Metasploit penetration
通讯录的动态实现
A great peripheral driver library! (based on stm32f4)
北京大学ACM Problems 1010:STAMPS
Flink相关API开发及运行架构和实现原理详解
MySQL analysis on how to reduce conflict and improve performance of row lock
一份很棒的外设驱动库!(基于STM32F4)
Xcode Cloud 入门:拉取请求 (PR) 工作流程
建议:ALT+X 标注已标注的区域,是否可以取消标注呢?
实现随机标签,字体大小、颜色随机显示
[C] give the earth some light
单体测试使用Assert.assertThat(expected,Matcher matcher)来对比结果和预期
做自媒体、短视频,不要再相信那些互关、互赞了
Réaliser l'affichage aléatoire de l'étiquette, de la taille de la police et de la couleur
20210818 diary
【数字信号处理】相关系数 ( 相关系数概念解析 | 信号能量常数 | 共轭序列 | 序列在相同时刻的相关性 )
Detailed explanation of Flink related API development and operation architecture and implementation principle
网易数帆王佰平:我的 Envoy Maintainer 之路
Which brand of running headphones is good and suitable for sports