五、微服务容错处理之Hystrix线程隔离策略与传播上下文


Hystrix的隔离策略有两种:
  • 线程隔离
  • 信号量隔离

THREAD(线程隔离):使用该方式,HystrixCommand将会在单独的线程上执行,并发请求受线程池中线程数量的限制。Hystrix中默认并且推荐使用线程隔离。

SEMAPHORE(信号量隔离):使用该方式,HystrixCommand将会在调用线程上执行,开销相对较小,并发请求受信号量的个数的限制。

一般来说,只有当调用负载非常高时(例如每个实例每秒调用数百次)才需要使用信号量隔离,因为这种场景下使用THREAD开销会比较高。信号量隔离一般仅适用于非网络调用的隔离。

如果想传播线程本地上下文到@HystrixCommand,默认声明不会工作,因为它会在线程池中执行命令(在超时的情况下)。可以使用一些配置,让Hystrix使用相同的线程,或者直接在注解中让Hystrix使用不同的隔离策略。

@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)

总结:

  • Hystrix的隔离策略有THREADSEMAPHONE两种,默认是THREAD
  • 正常情况下,保持默认即可。
  • 如果发生找不到上下文的运行时异常,可考虑将隔离策略设置为SEMAPHONE

该文章摘自《Spring Cloud 与 Docker 微服务架构实战(第二版)》

以上


文章作者: Qliang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Qliang !
评论
 上一篇
七、微服务容错处理之Hystrix的监控 七、微服务容错处理之Hystrix的监控
Hystrix的监控 为客户端添加spring-boot-starter-actuator依赖; 访问http://127.0.0.1:8010/hystrix.stream,就会不断刷新如下监控数据: ping: data: {"t
2019-01-23
下一篇 
六、微服务容错处理之Feign使用Hystrix 六、微服务容错处理之Feign使用Hystrix
Spring Cloud默认已经为Feign整合了Hystrix,要想打开Hystrix支持。 Feign使用Hystrix 配置文件添加: feign: hystrix: enabled: true 编写Feign接口:
2019-01-23
  目录