避坑指南(四):zuul整合断路器监控线程池一直loading

​转载请注明作者及出处:

作者:银河架构师

原文链接:https://www.cnblogs.com/luas/p/12214002.html

 

问题

zuul整合断路器监控后,监控页面Thread Pools一直loading,控制台也无明显报错。

 

分析

zuul默认集成了ribbon和hystrix,虽然hystrix的默认隔离策略为thread,但是在zuul中,hystrix的默认隔离策略为semaphore。

hystrix的默认隔离策略为thread

zuul中hystrix的默认隔离策略为semaphore。

如果zuul工程中,没有远程调用逻辑,如rest + ribbon、或者feign,此时,hystrix监控界面不展示线程池信息,一直是loading状态,如图。

此种情况的原因为zuul hystrix默认隔离策略为semaphore,而不是thread。

如果网关工程中,存在远程调用逻辑,无论rest + ribbon、或者feign,出现hystrix监控界面不展示情况,除了上述不存在远程调用逻辑的原因之外,还有可能是hystrix默认隔离策略的问题。hystrix默认隔离策略为thread,如果配置为semaphore,则远程调用部分的线程池则不会创建

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD

也可单独为某服务配置隔离策略。

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD
    xmall-product:
      execution:
        isolation:
          strategy: SEMAPHORE

 

如下图情况,原因为zuul hystrix默认隔离策略未配置为thread,而hystrix默认隔离策略为thread

如下图情况,原因为zuul hystrix默认隔离策略为thread,而hystrix默认隔离策略为semaphore

上述两种异常情况,均存在feign远程调用。

 

解决

将zuul中hystrix的默认隔离策略和hystrix的隔离策略设置为thread即可。

zuul:
  ribbon-isolation-strategy: THREAD
  
hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD

或者properties方式。

zuul.ribbon-isolation-strategy=THREAD
​
hystrix.command.default.execution.isolation.strategy=THREAD

 

微信搜索【银河架构师】,发现更多精彩内容。

 技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。

posted @ 2020-01-19 15:36  银河架构师  阅读(896)  评论(0编辑  收藏  举报