转载请注明作者及出处:
作者:银河架构师
问题
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
也可单独为某服务配置隔离策略。
如下图情况,原因为zuul hystrix默认隔离策略为thread,而hystrix默认隔离策略为semaphore。
上述两种异常情况,均存在feign远程调用。
解决
将zuul中hystrix的默认隔离策略和hystrix的隔离策略设置为thread即可。
微信搜索【银河架构师】,发现更多精彩内容。
技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。