Hystrix【参数配置及缓存】
1、常用参数说明
hystrix参数的详细配置可参照 https://github.com/Netflix/Hystrix/wiki/Configuration
下面是一些常用的配置:
| 配置项 | 默认值 | 默认属性 | 实例属性 |
| 隔离策略,HystrixCommandKey,如果不配置,默认为方法名 | THREAD | hystrix.command.default.execution.isolation.strategy | hystrix.command.HystrixCommandKey.execution.isolation.strategy |
| 超时时间,hystrixCommand命令执行超时时间,单位:毫秒 | 1000 | hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds | hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds |
| hystrixCommand命令执行是否开启超时 | true | hystrix.command.default.execution.timeout.enabled | hystrix.command.HystrixCommandKey.execution.timeout.enabled |
| 超时的时候,是否中断执行操作 | true | hystrix.command.default.execution.isolation.thread.interruptOnTimeout | hystrix.command.HystrixCommandKey.execution.isolation.thread.interruptOnTimeout |
| 信号量请求数,当设置为信号量隔离策略时,设置最大允许的请求数 | 10 | hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests | hystrix.command.HystrixCommandKey.execution.isolation.semaphore.maxConcurrentRequests |
| CircuitBreaker设置打开fallback并启动fallback逻辑的错误比例 | 50 | hystrix.command.default.circuitBreaker.errorThresholdPercentage | hystrix.command.HystrixCommandKey.circuitBreaker.errorThresholdPercentage |
| 强制打开断路器,拒绝所有请求 | false | hystrix.command.default.circuitBreaker.forceOpen | hystrix.command.HystrixCommandKey.circuitBreaker.forceOpen |
| 当为线程隔离时,核心线程池大小 | 10 | hystrix.threadpool.default.coreSize | hystrix.threadpool.HystrixThreadPoolKey.coreSize |
| 当隔离策略为线程池隔离模式时,最大线程池大小配置。1.5.9版本中还需要allowMaximumSizeToDivergeFromCore为true | 10 | hystrix.threadpool.default.maximumSize | hystrix.threadpool.HystrixThreadPoolKey.maximumSize |
| allowMaximumSizeToDivergeFromCore,该属性允许配置maximumSize生效 | false | hystrix.threadpool.default.allowMaximumSizeToDivergeFromCore | hystrix.threadpool.HystrixThreadPoolKey.default.allowMaximumSizeToDivergeFromCore |
在真实的项目中,一般会对超时时间、线程池大小、信号量等进行修改,具体需要根据业务,hystrix默认超时1秒,实际项目中,这个时间是肯定不够的,一般会设置5-10秒,如果有同步上传的业务,时间需要更长,如果配置了ribbon的时间,其超过时间也需要和ribbon的时间配合使用,一般情况下,ribbon的时间应短于hystrix的超时时间。
hystrix两种线程隔离方式比对
| 性能 | 线程池隔离模式(thread) | 信号量隔离模式(semaphore) |
| 默认 | 是 | 否 |
| 线程 | 与请求线程分离 | 与请求线程共享 |
| 开销 | 上下文频繁切换,开销较大 | 较小 |
| 异步 | 支持 | 不支持 |
| 应用并发 | 大 | 小 |
| 适用场景 | 外网交互 | 内网交互 |
hystrix.command.default.execution.isolation.strategy=thread/semaphore
当应用服务需要与外界交互,由于网络开销较大,这时选用线程隔离策略,可以保证有剩余的容器线程可用,而不会因为外部原因导致线程一直处于阻塞或者等待,可以快速失败返回。
当我们的应用只在内网交互,并且量还挺大,这时使用信号量隔离策略就比较好,因为这类应用的响应速度非常快,由于是内网,不会占用容器线程太长时间。
2、hystrix缓存使用
常用的注解说明:
| 注解 | 说明 |
@CacheResult |
使用该注解后,结果会被缓存,同时它需要和 @HystrixCommand(commandKey = "xxx") 一起使用,注解参数为cacheKeyMethod |
@CacheRemove(commandKey="xxx") |
清除缓存,需要指定commandKey,注解参数为cacheKeyMethod |
@CacheKey |
指定请求命令参数,默认使用方法所有参数作为key,注解属性为value |
一般在查询接口上使用@CacheResult,在更新接口上使用@CacheRemove删除缓存。
在使用hystrix缓存,注意事项:
- 需要开启 @EnableHystrix
- 需要初始化 HystrixRequestContext
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext; /**
* 初始化hystrix上下文
*/
public class HystrixContextInterceptor implements HandlerInterceptor { private HystrixRequestContext context; @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) {
context = HystrixRequestContext.initializeContext();
return true;
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3) {
context.shutdown();
} } - 在指定了 HystrixCommand 的commandKey以后,在@CacheRemove也要指定commandKey
Hystrix【参数配置及缓存】的更多相关文章
- Hystrix参数配置
1.Hystrix参数配置文档 2.Hystrix参数配置示例 import org.springframework.beans.factory.annotation.Autowired; impo ...
- MVC缓存OutPutCache学习笔记 (一) 参数配置
OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...
- SpringCloud实战-Hystrix线程隔离&请求缓存&请求合并
接着上一篇的Hystrix进行进一步了解. 当系统用户不断增长时,每个微服务需要承受的并发压力也越来越大,在分布式环境中,通常压力来自对依赖服务的调用,因为亲戚依赖服务的资源需要通过通信来实现,这样的 ...
- hystrix参数使用方法
hystrix+feign+ribbon,但是可能很多人都知道hystrix还有线程隔离,信号量隔离,等等各种参数配置,在这几就记录下hystrix的参数, 一.hystrix参数使用方法 通过注解@ ...
- Hystrix断路器配置属性解析
HystrixCommand 配置方式 我们的配置都是基于 HystrixCommand 的,我们通过在方法上添加 @HystrixCommand 注解并配置注解的参数来实现配置,但有的时候一个类里面 ...
- Spring自定义缓存管理及配置Ehcache缓存
spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...
- 教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用
引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要 ...
- Django中如何配置Database缓存?
BACKEND: django.core.cache.backends.db.DatabaseCache LOCATION: 数据库表名 示例: CACHES = { 'default': { 'BA ...
- jvm调优具体参数配置
3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...
随机推荐
- 性能测试JMeter应用篇---同线程组、跨线程组实现token共用
方式一:将token值取出,设为全局变量,同线程组内可共用token值 1.登录请求如下: 2.从登录请求返回json字符串中提取token值,保存为变量token_0: 3.将token设置为全局变 ...
- docker安装postgresql
1.在linux执行以下代码: docker run -p : -v /home/docker/postgresql/data:/var/lib/postgresql/data -e POSTGRES ...
- UDP如何实现可靠传输
概述 UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响. 传输层无法保证数据的可靠传输 ...
- 登录科普(一)CAS与Oauth
https://www.jianshu.com/p/18aedcaf47f2 CAS的单点登录,资源都在客户端这边,不在CAS的服务器那一方. 用户在给CAS服务端提供了用户名密码后,作为CAS客户端 ...
- Assignment5: 使用Visual Studio 进行可编码的UI测试
一.实验目的: 使用Visual Studio 可编码的UI测试功能创作自动化测试 二.实验原理:黑盒测试 三.实验需求:win8 app.Visual Studio Ultimate 2012/20 ...
- Gated CNN 阅读笔记
之前看过TCN,稍微了解了一下语言模型,这篇论文也是对语言模型建模,但是由于对语言模型了解不深,一些常用数据处理方法,训练损失的计算包括残差都没有系统的看过,只是参考网上代码对论文做了粗浅的复现.开学 ...
- ActiveMq 本地安装及启动(Windows)
首先下载MQ的安装包 http://activemq.apache.org/download.html 1.点击最新版本的ActiveMQ的 2.这里有窗户版本和Linux的的版本,这里我们选择窗口版 ...
- Qt *.pro工程文件 详解
先介绍一下QT中关于项目的相关介绍 app - 建立一个应用程序的makefile.这是默认值,所以如果模板没有被指定,这个将被使用. lib - 建立一个库的makefile. vcapp - 建立 ...
- 雪花ID实现新增数据同步
雪花ID实现新增数据同步 GUID生成的ID,可以确保是唯一ID,但却是无序的,不适合用于数据同步. 雪花算法生成的ID(INT64)能够按照时间有序(升序)生成.只要电脑上的时间是正确的,新增的记录 ...
- C# ZIP 压缩解压
ZIP流是在NetFramework4.5 引入的目的是为了能够更好的操作ZIP文件,进行压缩解压等操作.与ZIP流相关的几个类是: ZipArchive 代表一个ZIP的压缩包文件 ZipArchi ...