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【参数配置及缓存】的更多相关文章

  1. Hystrix参数配置

    1.Hystrix参数配置文档  2.Hystrix参数配置示例 import org.springframework.beans.factory.annotation.Autowired; impo ...

  2. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  3. SpringCloud实战-Hystrix线程隔离&请求缓存&请求合并

    接着上一篇的Hystrix进行进一步了解. 当系统用户不断增长时,每个微服务需要承受的并发压力也越来越大,在分布式环境中,通常压力来自对依赖服务的调用,因为亲戚依赖服务的资源需要通过通信来实现,这样的 ...

  4. hystrix参数使用方法

    hystrix+feign+ribbon,但是可能很多人都知道hystrix还有线程隔离,信号量隔离,等等各种参数配置,在这几就记录下hystrix的参数, 一.hystrix参数使用方法 通过注解@ ...

  5. Hystrix断路器配置属性解析

    HystrixCommand 配置方式 我们的配置都是基于 HystrixCommand 的,我们通过在方法上添加 @HystrixCommand 注解并配置注解的参数来实现配置,但有的时候一个类里面 ...

  6. Spring自定义缓存管理及配置Ehcache缓存

    spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...

  7. 教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用

    引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要 ...

  8. Django中如何配置Database缓存?

    BACKEND: django.core.cache.backends.db.DatabaseCache LOCATION: 数据库表名 示例: CACHES = { 'default': { 'BA ...

  9. jvm调优具体参数配置

    3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...

随机推荐

  1. 读取本地word 浏览器下载(设置编码格式)

    String filePath = "C:\\word\\报告.doc"; BufferedWriter bos = null; BufferedReader bis = null ...

  2. 第10组 Alpha冲刺(1/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 史恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Gi ...

  3. css 文本省略号显示

    文本省略号是非常常见的需求,而省略号展示又通常分为俩种情况折行和不折行.不折行: div { white-space:nowrap;/* 规定文本是否折行 */ overflow: hidden;/* ...

  4. Learning Conditioned Graph Structures for Interpretable Visual Question Answering

    Learning Conditioned Graph Structures for Interpretable Visual Question Answering 2019-05-29 00:29:4 ...

  5. linux下/etc/profile、/etc/bashrc、~/.bashrc 和~/.bash_profile文件的区别

    这个一定要理解登录式shell和非登录式shell的区别,前者是完全切换用户,后者是不完全,就算切换过来了,你pwd时家目录还是之前的家目录,所以 登录式顺序为:/etc/bashrc---/etc/ ...

  6. 京东HBase平台进化与演进

    https://mp.weixin.qq.com/s/7_dxrqFWwIJxNtL9-xD6FA

  7. 办公室上网慢原因排查 有人下载东西 设置行为管理 宽带分配设置独立下行宽带 TL-WVR1200L

    办公室上网慢原因排查 有人下载东西  设置行为管理 宽带分配设置独立下行宽带

  8. lua:写了个基于协程的task调度库

    写了一个(不完整的)基于协程的task调度库 sample code如下 my_spawn( function () print('f: 1') local t1 = my_spawn( functi ...

  9. leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings

    542. 01 Matrix https://www.cnblogs.com/grandyang/p/6602288.html 将所有的1置为INT_MAX,然后用所有的0去更新原本位置为1的值. 最 ...

  10. typescript装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序

    /* 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常 ...