轉載請注明作者及出處:
作者:銀河架構師
問題
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相關電子書。