1:概述
Hystrix使用Archaius做爲配置屬性的默認實現。官方配置文檔: https://github.com/Netflix/Hystrix/wiki/Configuration
每一個屬性有四個優先級,依次增大:
git
- 1:代碼的全局默認值
- 2:動態全局默認屬性
能夠使用全局屬性文件來更改全局默認值。 - 3:代碼實例默認
定義特定於實例的默認值,好比在HystrixCommand構造函數中設置的值 - 4:動態實例屬性
能夠動態設置實例特定的值,從而覆蓋前面三個默認級別,格式是:
hystrix.command.命令key.屬性名稱=值
2:請求上下文
1:requestCache.enabled
設置是否開啓請求的緩存功能,默認true
2:requestLog.enabled
設置是否開啓請求的日誌功能,默認true
github
3:命令執行
- execution.isolation.strategy
指示HystrixCommand.run()執行哪一個隔離策略,選項:
1:THREAD - 它在單獨的線程上執行,併發請求受線程池中線程數的限制
2:SEMAPHORE - 它在調用線程上執行,併發請求受信號計數的限制
3:官方推薦使用線程隔離策略,默認也是按照線程隔離進行處理。
4:信號量隔離的方式是限制了總的併發數,每一次請求過來,請求線程和調用依賴服務的線程是同一個線程,那麼若是不涉及遠程RPC調用(沒有網絡開銷)則使用信號量來隔離,更爲輕量,開銷更小。
5:信號量的大小能夠動態調整, 線程池大小不能夠動態調整。
6:配置示例:@HystrixCommand(fallbackMethod = "error", commandProperties = { @HystrixProperty(name="execution.isolation.strategy", value = "THREAD") })
- execution.isolation.thread.timeoutInMilliseconds
表示請求線程總超時時間,若是超過這個設置的時間hystrix就會調用fallback方法。value的參數爲毫秒,默認值爲1000ms。@HystrixCommand(fallbackMethod = "error", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "4000") })
- execution.timeout.enabled
這個超時開關表示,當超時後是否觸發fallback方法,默認爲true。 - execution.isolation.thread.interruptOnTimeout
表示HystrixCommand.run()在發生超時時是否應該中斷執行,默認true - execution.isolation.thread.interruptOnCance
表示HystrixCommand.run()在發生取消時是否應該中斷執行,默認false - execution.isolation.semaphore.maxConcurrentRequests
當隔離策略使用SEMAPHORE時,最大的併發請求量,若是請求超過這個最大值將拒絕後續的請求,默認值爲10
4:回退
- fallback.isolation.semaphore.maxConcurrentRequests
設置HystrixCommand.getFallback()方法容許從調用線程進行請求的最大數量,默認10
若是達到最大併發限制,則隨後的請求將被拒絕,並拋出異常。 - fallback.enabled
開啓fallback功能,默認true
5:斷路器
- circuitBreaker.enabled
設置是否將使用斷路器來跟蹤健康情況,而且若是斷路器跳閘則將其短路。默認true - circuitBreaker.requestVolumeThreshold
設置滾動窗口中將使電路跳閘的最小請求數量,默認20。
熔斷器在整個統計時間內是否開啓的閥值,每一個熔斷器默認維護10個bucket,每秒一個bucket,每一個bucket記錄成功,失敗,超時,拒絕的狀態,該閾值默認20次。也就是一個統計窗口時間內(10秒鐘)至少請求20次,熔斷器才啓動。 - circuitBreaker.sleepWindowInMilliseconds
熔斷器默認工做時間,默認值爲5秒,熔斷器中斷請求5秒後會進入半打開狀態,放部分流量過去重試,若是重試成功則會恢復正常請求。 - circuitBreaker.errorThresholdPercentage
熔斷器錯誤閾值,默認爲50%。當在一個時間窗口內出錯率超過50%後熔斷器自動啓動。熔斷器啓動後會自動轉發到配置的fallbackMethod,進行降級處理。 - circuitBreaker.forceOpen
斷路器強制開關,若是設置爲true則表示強制打開熔斷器,全部請求都會拒絕,默認false - circuitBreaker.forceClosed
斷路器強制開關,若是設置爲true則表示強制關閉熔斷器,全部請求都會容許,默認false
6: 度量指標
- metrics.rollingStats.timeInMilliseconds
設置統計滾動窗口的持續時間,以毫秒爲單位。默認10秒 - metrics.rollingStats.numBuckets
該屬性設置滾動統計窗口分紅的桶的數量。默認10 - metrics.rollingPercentile.enabled
表示執行延遲是否應該跟蹤和計算爲百分比。若是被禁用,則全部彙總統計返回爲-1。默認true - metrics.rollingPercentile.timeInMilliseconds
設置滾動窗口的持續時間,在該窗口中保留執行時間以容許百分數計算(單位毫秒),默認1分鐘。 - metrics.rollingPercentile.numBuckets
設置rollingPercentile窗口將被分紅的桶的數量,默認6 - metrics.rollingPercentile.bucketSize
設置每一個存儲桶的最大執行次數,若是在執行屢次,將在桶的開頭重寫。默認100
例如,若是存儲區大小設置爲100,並表示10秒的存儲區窗口,但在此期間發生500次執行,則只有最後100次執行將保留在該10秒存儲區中 - metrics.healthSnapshot.intervalInMilliseconds
設置容許執行健康快照之間等待的時間(以毫秒爲單位)。默認500
7: ThreadPool配置
- coreSize
線程池核心線程數,默認值爲10。 - MAXIMUMSIZE
設置線程池大小,默認10 - maxQueueSize
配置線程池任務隊列的大小,默認值爲 -1。當使用 -1 時,SynchronousQueue將被使用,即意味着其實這個隊列只是一個交換器,任務將被直接交給工做線程處理。若是工做線程不足,那任務將被拒絕;若是使用任何正整數,LinkedBlockingQueue將被使用 - queueSizeRejectionThreshold
表示等待隊列超過閾值後開始拒絕線程請求,默認值爲5,若是maxQueueSize爲-1,則該屬性失效。 - keepAliveTimeMinutes
設置活動保持時間,以分鐘爲單位,默認1分鐘 - allowMaximumSizeToDivergeFromCoreSize
配置maximumSize生效。這個值能夠等於或高於coreSize,默認false