SpringCloud- 第六篇 Hystrix參數配置(三)

1:概述

image.png

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

image.png

相關文章
相關標籤/搜索