hystrix文档翻译之配置
Hystrix使用Archaius作为配置的默认实现,下面介绍的是HystrixPropertiesStrategy的默认实现,你也可以通过插件方式重新实现。
每一个配置有四个级别:
- 全局默认
当下面的三个配置都没有设置的时候,就会使用全局默认值。
- 动态全局默认
你可以手动设置全局配置。
- 默认实例配置
你也可以手动设置实例的默认值。
HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(int value)
在构造时设置默认值
public HystrixCommandInstance(int id) {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(500)));
this.id = id;
}
还有些简便的构造方法
public HystrixCommandInstance(int id) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"), 500);
this.id = id;
}
- 动态实例
可以为实例设置动态的配置来覆盖前面三中配置。动态配置以下面的格式配置。
hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
使用HystrixCommandKey.name来替换上面的HystrixCommandKey。
据一个例子,如果一个命令的key叫做SubscriberGetAccount,那么配置如下:
hystrix.command.SubscriberGetAccount.execution.isolation.thread.timeoutInMilliseconds
命令配置
下面是HystrixCommand的配置:
执行
下面的配置来控制HystrixCommand.run的执行。
execution.isolation.strategy
这个配置决定HystrixCommand.run用什么策略执行,有以下两种策略可以选择:
THREAD--使用独立的线程池来执行,执行的并发量由线程池大小控制。
SEMAPHORE--使用调用请求的线程池执行,执行的并发量由设定的信号量决定。
线程池还是信号量执行
默认建议是使用线程池来运行HystrixCommand;使用信号量来运行HystrixObservableCommand。
使用线程池执行可以在服务延时时对系统进行保护。
通常只有在流量太大以至无法使用线程池的情况下使用信号量来执行HystrixCommand。通常使用在无网络请求。
Netflix API有100个命令运行在40多个线程池,只有一小部分命令没有以线程池方式运行。哪些命令主要是从内存缓存中获取数据。

| 默认值 | THREAD |
| 可选值 | THREAD,SEMAPHORE |
| 默认配置 | hystrix.command.default.execution.isolation.strategy |
| 实例配置 | hystrix.command.HystrixCommandKey.execution.isolation.strategy |
| 设置默认实例配置 |
HystrixCommandProperties.Setter().withExecutionIsolationStrategy(ExecutionIsolationStrategy.THREAD) HystrixCommandProperties.Setter().withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE) |
execution.isolation.thread.timeoutInMilliseconds
这个配置可以设置命令执行的timeout时间,如果发生了timeout,HystrixCommand会标识为TIMEOUT并且执行fallback逻辑。你也可以关闭timeout检查。
| 默认值 | 1000 |
| 默认属性 | hystrix.command.default.execution.isolation.thread.timeoutInMillisecond |
| 实例属性 | hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds |
| 设置默认实例属性 | HystrixCommandProperties.Setter() .withExecutionTimeoutInMilliseconds(int value) |
execution.timeout.enabled
设置是否开启HystrixCommand.run()的timeout检查。
| 默认值 | true |
| 默认属性 | hystrix.command.default.execution.timeout.enabled |
| 实例属性 | hystrix.command.HystrixCommandKey.execution.timeout.enabled |
| 设置默认实例属性 | HystrixCommandProperties.Setter() .withExecutionTimeoutEnabled(boolean value) |
execution.isolation.thread.interruptOnTimeout
设置当HystrixCommand.run()发生timeout后是否需要中断。
| 默认值 | true |
| 默认属性 | hystrix.command.default.execution.isolation.thread.interruptOnTimeout |
| 实例属性 | hystrix.command.HystrixCommandKey.execution.isolation.thread.interruptOnTimeout |
| 设置默认实例属性 | HystrixCommandProperties.Setter() .withExecutionIsolationThreadInterruptOnTimeout(boolean value) |
execution.isolation.thread.interruptOnCancel
设置当发生cancellation时,HystrixCommand.run()是否需要中断。
| 默认值 | false |
| 默认属性 | hystrix.command.default.execution.isolation.thread.interruptOnCancel |
| 实例属性 | hystrix.command.HystrixCommandKey.execution.isolation.thread.interruptOnCancel |
| 设置默认实例属性 | HystrixCommandProperties.Setter() .withExecutionIsolationThreadInterruptOnCancel(boolean value) |
execution.isolation.semaphore.maxConcurrentRequests
当HystrixCommand.run()使用ExecutionIsolationStrategy.SEMAPHORE执行时,设置请求的并发数。超过设置并发数的请求将被拒绝。设置信号量大小的逻辑和设置线程池大小的逻辑是一样的,但是信号量往往使用在执行快的命令上。
据一个例子,5000rps的寻找内存中metrics并计算的单个实例,只需要设置2个信号量。这样信号量只占tomcat线程中很小的一部分,不会影响整体系统性能。
| 默认值 | 10 |
| 默认属性 | hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests |
| 实例属性 | hystrix.command.HystrixCommandKey.execution.isolation.semaphore.maxConcurrentRequests |
| 默认实例属性 | HystrixCommandProperties.Setter() .withExecutionIsolationSemaphoreMaxConcurrentRequests(int value) |
降级
下面的配置来控制HystrixCommand.getFallback()的执行,这些配置适用于ExecutionIsolationStrategy.THREAD and ExecutionIsolationStrategy.SEMAPHORE.
fallback.isolation.semaphore.maxConcurrentRequests
这个属性控制HystrixCommand.getFallback()最大的并发量。如果超过最大并发量,fallback执行将会被拒绝,然后抛出异常。
| 默认值 | 10 |
| 默认属性 | hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests |
| 实例属性 | hystrix.command.HystrixCommandKey.fallback.isolation.semaphore.maxConcurrentRequests |
| 默认实例属性 | HystrixCommandProperties.Setter() .withFallbackIsolationSemaphoreMaxConcurrentRequests(int value) |
fallback.enabled
该配置控制是否开启HystrixCommand.getFallback()
| 默认值 | true |
| 默认属性 | hystrix.command.default.fallback.enabled |
| 实例属性 | hystrix.command.HystrixCommandKey.fallback.enabled |
| 默认实例属性 | HystrixCommandProperties.Setter() .withFallbackEnabled(boolean value) |
熔断
熔断配置控制熔断器。
circuitBreaker.enabled
该配置控制是否开启熔断器
| 默认值 | true |
| 默认属性 | hystrix.command.default.circuitBreaker.enabled |
| 实例属性 | hystrix.command.HystrixCommandKey.circuitBreaker.enabled |
| 默认实例属性 | HystrixCommandProperties.Setter() .withCircuitBreakerEnabled(boolean value) |
circuitBreaker.requestVolumeThreshold
该配置设置窗口期内触发熔断的最小请求数,例如该值设置成20,当只有19个请求时,即使这19个请求都失败,也不会触发熔断。
| 默认值 | 20 |
| 默认属性 | hystrix.command.default.circuitBreaker.requestVolumeThreshold |
| 实例属性 | hystrix.command.HystrixCommandKey.circuitBreaker.requestVolumeThreshold |
| 默认实例属性 | HystrixCommandProperties.Setter() .withCircuitBreakerRequestVolumeThreshold(int value) |
circuitBreaker.sleepWindowInMilliseconds
hystrix文档翻译之配置的更多相关文章
- Hystrix线程池配置
Hystrix配置文件配置 断路器: hystrix.command.default.circuitBreaker.requestVolumeThreshold(当在配置时间窗口内达到此数量的失败后, ...
- hystrix(4) properties配置
这一节我们来讲hystrix的properties配置体系,properties配置也是各个功能模块的基础功能.hystrix将配置分成三个部分: 1.HystrixCommandProperties ...
- Hystrix 常用属性配置
配置参数 默认值 说明 命令-执行属性配置 hystrix.command.default.execution.isolation.strategy THREAD 配置隔离策略,有效值 THREAD, ...
- 服务容错保护断路器Hystrix之五:配置
接着<服务容错保护断路器Hystrix之二:Hystrix工作流程解析>中的<2.8.关于配置>再列举重要的配置如下 一.hystrix在生产中的建议 1.保持timeout的 ...
- Hystrix使用说明,配置参数说明
一.什么情况下会触发fallback方法? 名字 描述 触发fallback EMIT 值传递 NO SUCCESS 执行完成,没有错误 NO FAILURE 执行抛出异常 YES TIMEOUT 执 ...
- feign使用hystrix熔断的配置
熔断器hystrix 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的. Hystrix 可以让我们在分布式系统中对服务间的调用 ...
- Hystrix【参数配置及缓存】
1.常用参数说明 hystrix参数的详细配置可参照 https://github.com/Netflix/Hystrix/wiki/Configuration 下面是一些常用的配置: 配置项 默认值 ...
- hystrix熔断器之配置
HystrixCommandProperties命令执行相关配置: hystrix.command.[commandkey].execution.isolation.strategy 隔离策略THRE ...
- hystrix文档翻译之插件
插件 可以通过实现插件来改变Hystrix的行为.可以通过HystrixPlugins来注册自定义插件,这些插件会被应用到HystrixCommand,HystrixObservableCommand ...
随机推荐
- Linux C++实现一服务器与多客户端之间的通信
通过网络查找资料得到的都是一些零碎不成体系的知识点,无法融会贯通.而且需要筛选有用的信息,这需要花费大量的时间.所以把写代码过程中用到的相关知识的博客链接附在用到的位置,方便回顾. 1.程序流程 服务 ...
- JDBC API阐述
JDBC API JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果. Driver 接口 Java.sql.Driver 接口是所有 JDBC 驱动 ...
- python编译错误ValueError: Complex data not supported
今天在用python跑一个k-means算法与谱聚类算法对比的程序时,谱聚类的图不能出来,编译报错 后来,多亏了这位GitHub用户,找到了解决办法,是因为在运算过程中出现了复数,因此要进行强制转换 ...
- .net core 中的经典设计模式的应用
.net core 中的经典设计模式的应用 Intro 前段时间我们介绍了23种设计模式,今天来分享一下 asp.net core 种我觉得比较典型的设计模式的应用 实例 责任链模式 asp.net ...
- SPSSAU数据分析思维培养系列1:数据思维篇
今天,SPSSAU给大家带来[数据分析思维培养]系列课程.主要针对第一次接触数据分析,完全不懂分析的小白用户,或者懂一些简单方法但苦于没有分析思路,不知道如何规范化分析. 本文章为SPSSAU数据分析 ...
- 简单实现C++Stack模板
栈的特点是先进后出以及只能在栈顶进行插入和删除操作 本次实现的栈的基本操作: 1)弹栈 2)压栈 3)求栈大小 4)求栈容量 5)判断栈空 6)获取栈顶元素 1.用数组的方式实现栈基本操作 /** * ...
- 完美解决方案-雪花算法ID到前端之后精度丢失问题
最近公司的一个项目组要把以前的单体应用进行为服务拆分,表的ID主键使用Mybatis plus默认 的雪花算法来生成. 快下班的时候,小伙伴跑过来找我,:"快给我看看这问题,卡这卡了小半天了 ...
- 创建一个springbootcloud项目
nacos:服务治理 fegin:负载均衡 sentinel:分布式系统的流量防卫兵 sleuth+zipkin:链路追踪 前提软件安装 nacos: github下载地址:https://githu ...
- light Map
Unity5中lightmap的坑 http://blog.csdn.net/langresser_king/article/details/48914901 Unity中光照贴图一二坑及解决办法 h ...
- 使用easyexcel时遇到Could not initialize class net.sf.cglib.beans.BeanMap$Generator
可以访问 这里 查看更多关于大数据平台建设的原创文章. 上一篇文章 Maven项目为什么会产生NoClassDefFoundError的jar包冲突 结合了大量的图解,详细介绍了Maven项目产生ja ...