前言
我們在使用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
(完)