Hystrix的隔離策略有兩種:分別是線程隔離和信號量隔離。
THREAD(線程隔離):使用該方式,HystrixCommand將會在單獨的線程上執行,並發請求受線程池中線程數量的限制。
SEMAPHORE(信號量隔離):使用該方式,HystrixCommand將會在調用線程上執行,開銷相對較小,並發請求受信號量的個數的限制。
配置:hystrix.command.default.execution.isolation.strategy 隔離策略,默認是Thread, 可選Thread|Semaphore
(1) 什么是線程池隔離?
為每一個服務接口單獨開辟一個線程池,保持與其他服務接口線程的隔離,提高該服務接口的獨立性和高可用。
(2) 線程池隔離的優點是什么?
(3) 線程池隔離的缺點是什么?
線程池隔離和信號量隔離的區別
(1) 線程池隔離與信號量隔離有什么區別?
(2) 什么情況下使用線程池隔離?
(3) 什么情況下使用信號量隔離?
hystrixCommand線程
線程池隔離:
1、調用線程和hystrixCommand線程不是同一個線程,並發請求數受到線程池(不是容器tomcat的線程池,而是hystrixCommand所屬於線程組的線程池)中的線程數限制,默認是10。
2、這個是默認的隔離機制
3、hystrixCommand線程無法獲取到調用線程中的ThreadLocal中的值
信號量隔離:
1、調用線程和hystrixCommand線程是同一個線程,默認最大並發請求數是10
2、調用數度快,開銷小,由於和調用線程是處於同一個線程,所以必須確保調用的微服務可用性足夠高並且返回快才用
注意:如果發生找不到上下文的運行時異常,可考慮將隔離策略設置為SEMAPHONE。