Spring Cloud Hystrix Command屬性詳解

前言

我們在使用springcloud的時候難免會使用Hystrix ,下面對屬性配置做一個筆記;

配置

主要有下面幾種類型的屬性配置:

配置前綴爲 hystrix.command.default

execution配置:

  • execution.isolation.strategy :該屬性用來設置執行的隔離策略,有如下二個選項:

    • THREAD:通過線程池隔離的策略,在獨立線程上執行,並且他的併發限制受線程池中線程數量的限制(默認)
    • SEMAPHONE:通過信號量隔離的策略,在調用線程上執行,並且他的併發限制受信號量計數的限制。
  • execution.isolation.thread.timeoutInMilliseconds:該屬性用來配置 HystrixCommand 執行的超時時間,單位爲毫秒,默認值 1000 ,超出此時間配置,Hystrix 會將該執行命令爲 TIMEOUT 並進入服務降級處理邏輯
  • execution.timeout.enabled:該屬性用來配置 HystrixCommand 執行是否啓動超時時間,默認值 true,如果設置爲 false,則 execution.isolation.thread.timeoutInMilliseconds 屬性的配置將不起作用
  • execution.isolation.thread.interruptOnTimeout:該屬性用來配置當 HystrixCommand 執行超時的時候,是否需要將他中斷,默認值 true
  • execution.isolation.semaphore.maxConcurrentRequests:當隔離策略使用信號量時,該屬性用來配置信號量的大小,當最大併發請求數達到該設置值,後續的請求將會被拒絕

fallback配置:

  • fallback.enabled:該屬性用來設置服務降級策略是否啓用,默認值 true ,如果設置爲false,當請求失敗或拒絕發生時,將不會調用 HystrixCommand.getFallback() 來執行服務降級邏輯

circuitBreaker 配置:

  • circuitBreaker.enabled:該屬性用來確定當服務請求命令失敗時,是否使用斷路器來跟蹤其健康指標和熔斷請求,默認值 true
  • circuitBreaker.requestVolumeThreshold:該屬性用來設置在滾動時間窗中,斷路器的最小請求數。例如:默認值 20 的情況下,如果滾動時間窗(默認值 10秒)內僅收到19個請求,即使這19個請求都失敗了,斷路器也不會打開。
  • circuitBreaker.sleepWindowInMilliseconds:該屬性用來設置當斷路器打開之後的休眠時間窗。默認值 5000 毫秒,休眠時間窗結束之後,會將斷路器設置爲"半開"狀態,嘗試熔斷的請求命令,如果依然失敗就將斷路器繼續設置爲"打開"狀態,如果成功就設置爲"關閉"狀態。
  • circuitBreaker.errorThresholdPercentage:該屬性用來設置斷路器打開的錯誤百分比條件。例如,默認值爲 50 的情況下,表示在滾動時間窗中,在請求數量超過 circuitBreaker.requestVolumeThreshold 閾值的請求下,如果錯誤請求數的百分比超過50,就把斷路器設置爲"打開"狀態,否則就設置爲"關閉"狀態。
  • circuitBreaker.forceOpen:該屬性用來設置斷路器強制進入"打開"狀態,會拒絕所有請求,該屬性優先於 circuitBreaker.forceClosed
  • circuitBreaker.forceClosed:該屬性用來設置斷路器強制進入"關閉"狀態,會接收所有請求。

metrics 配置:

該配置屬性與HystrixCommand 和 HystrixObservableCommand 執行中捕獲指標信息有關

  • metrics.rollingStats.timeInMilliseconds:該屬性用於設置滾動時間窗的長度,單位毫秒,該時間用於斷路器判斷健康度時需要收集信息的持續時間,默認值 10000 。斷路器值啊收集指標信息時候會根據設置的時間窗長度拆分成多個"桶"來累計各度量值,每個"桶"記錄了一段時間內的採集指標。
  • metrics.rollingStats.numBuckets:該屬性用來設置滾動時間窗統計指標信息時,劃分"桶"的數量,默認值 10 。 metrics.rollingStats.timeInMilliseconds 參數的設置必須能被該參數整除,否則將拋出異常。

    metrics.rollingPercentile.enabled:該屬性用來設置對命令執行的延遲是否使用百分位數來跟蹤和計算,默認值 true ,如果設置爲 false 那麼所有概要統計都將返回 -1

  • metrics.rollingPercentile.timeInMilliseconds:該屬性用來設置百分位統計的滾動窗口的持續時間,單位:毫秒,默認值 60000
  • metrics.rollingPercentile.numBuckets:該屬性用來設置百分位統計窗口中使用"桶"的數量,默認值 6
  • metrics.rollingPercentile.bucketSize:該屬性用來設置在執行過程中每個"桶"中保留的最大執行次數,如果在滾動時間窗內發生超該設定值的執行次數,就從最初的位置開始重寫,例如:設置爲 100,滾動窗口爲 10 秒,若在10秒內一個"桶"中發生了500次執行,那麼該"桶"中只保留最後的100次執行的統計,默認值 100
  • metrics.healthSnapshot.intervalInMilliseconds:該屬性用來設置採集影響斷路器狀態的健康快照(請求的成功、錯誤百分比)的間隔等待時間,默認值 500

requestContext 配置:

  • requestCache.enabled:該屬性用來配置是否開啓請求緩存
  • requestLog.enabledg:該屬性用來設置 HystrixCommand 的執行和事件是否打印日誌到 HystrixRequestLog 中,默認值 true

配置前綴爲 hystrix.collapser.default

  • maxRequestsInBatch:該屬性用來設置一次請求合併批處理允許的最大請求數量,默認值 Integer.MAX_VALUE
  • timerDelayInMilliseconds:該屬性用來設置批處理過程中每個命令延遲的時間,單位毫秒,默認值 10
  • requestCache.enabled:該屬性用來設置批處理過程中是否開啓請求緩存,默認值 true

配置前綴爲 hystrix.threadpool.default

  • coreSize:該屬性用來設置執行命令線程池的核心線程數,該值也就是命令執行的最大併發量,默認值 10
  • maxQueueSize:該屬性用來設置線程池的最大隊列大小,當設置爲 -1 時,線程池將使用 SynchronousQueue 實現的隊列,否則使用 LinkedBlockingQueue 實現的隊列,默認值 -1
  • queueSizeRejectionThreshold :該屬性用來爲隊列設置拒絕閾值,即使隊列沒有到達最大值也能拒絕請求,該屬性主要對 LinkedBlockingQueue 隊列的補充,默認值 5,當 maxQueueSize 屬性爲 -1 時候,該屬性無效
  • metrics.rollingPercentile.timeInMilliseconds:該屬性用來設置線程池統計的滾動窗口的持續時間,單位:毫秒,默認值 10000
  • metrics.rollingPercentile.numBuckets:該屬性用來設置線程池統計窗口中使用"桶"的數量,默認值 10

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章