1. 程式人生 > >Hystrix執行緒隔離策略與傳播上下文

Hystrix執行緒隔離策略與傳播上下文

Hystrix的隔離策略有兩種:分別是執行緒隔離和訊號量隔離。THREAD(執行緒隔離):使用該方式,HystrixCommand將會在單獨的執行緒上執行,併發請求受執行緒池中執行緒數量的限制。SEMAPHORE(訊號量隔離):使用該方式,HystrixCommand將會在呼叫執行緒上執行,開銷相對較小,併發請求受訊號量的個數的限制。Hystrix中預設並且推薦使用執行緒隔離,因為這種方式有一個除網路超時以外的額外保護層。一般來說,只有當呼叫負載非常高時(例如每個例項每秒呼叫數百次)才需要使用訊號量隔離,因為這種場景下使用THREAD開銷會比較高。訊號量隔離一般僅適用於非網路呼叫的隔離。可以使用execution.isolation.strategy屬性來指定隔離策略
@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)
如果想傳播執行緒本地上下文到@HystrixCommand,預設宣告不會工作,因為它會線上程池中執行命令(在超時的情況下)。可以使用一些配置,讓Hystrix使用相同的執行緒,或者直接在註解中讓Hystrix使用不同的隔離策略。例如
@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)
總結:1 Hystrix的隔離策略有THREAD和SEMAPHONE兩種,預設是THREAD2 正常情況下,保持預設即可。3 如果發生找不到上下文的執行時異常,可考慮將隔離策略設定為SEMAPHONE