Hystrix使用說明,配置參數說明


一、什么情況下會觸發fallback方法?

名字

描述

觸發fallback

EMIT

值傳遞

NO

SUCCESS

執行完成,沒有錯誤

NO

FAILURE

執行拋出異常

YES

TIMEOUT

執行開始,但沒有在允許的時間內完成

YES

BAD_REQUEST

執行拋出HystrixBadRequestException

NO

SHORT_CIRCUITED

斷路器打開,不嘗試執行

YES

THREAD_POOL_REJECTED

線程池拒絕,不嘗試執行

YES

SEMAPHORE_REJECTED

信號量拒絕,不嘗試執行

YES

 二、fallback方法在什么情況下會拋出異常

名字

描述

拋異常

FALLBACK_EMIT

Fallback值傳遞

NO

FALLBACK_SUCCESS

Fallback執行完成,沒有錯誤

NO

FALLBACK_FAILURE

Fallback執行拋出出錯

YES

FALLBACK_REJECTED

Fallback信號量拒絕,不嘗試執行

YES

FALLBACK_MISSING

沒有Fallback實例

YES

 三、hystrix dashboard界面監控參數

 

四、配置信息(default或HystrixCommandKey)最常用的幾項

超時時間(默認1000ms,單位:ms) 

1hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

在調用方配置,被該調用方的所有方法的超時時間都是該值,優先級低於下邊的指定配置

2hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds

在調用方配置,被該調用方的指定方法(HystrixCommandKey方法名)的超時時間是該值

線程池核心線程數

hystrix.threadpool.default.coreSize(默認為10)

Queue

1hystrix.threadpool.default.maxQueueSize(最大排隊長度。默認-1,使用SynchronousQueue。其他值則使用 LinkedBlockingQueue。如果要從-1換成其他值則需重啟,即該值不能動態調整,若要動態調整,需要使用到下邊這個配置)

2hystrix.threadpool.default.queueSizeRejectionThreshold(排隊線程數量閾值,默認為5,達到時拒絕,如果配置了該選項,隊列的大小是該隊列)

注意:如果maxQueueSize=-1的話,則該選項不起作用

斷路器

1hystrix.command.default.circuitBreaker.requestVolumeThreshold(當在配置時間窗口內達到此數量的失敗后,進行短路。默認20個)

For example, if the value is 20, then if only 19 requests are received in the rolling window (say a window of 10 seconds) the circuit will not trip open even if all 19 failed.

簡言之,10s內請求失敗數量達到20個,斷路器開。

2hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds(短路多久以后開始嘗試是否恢復,默認5s)

3hystrix.command.default.circuitBreaker.errorThresholdPercentage(出錯百分比閾值,當達到此閾值后,開始短路。默認50%)

fallback

hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests(調用線程允許請求HystrixCommand.GetFallback()的最大數量,默認10。超出時將會有異常拋出,注意:該項配置對於THREAD隔離模式也起作用)

 五、屬性配置參數

參數說明英文地址:https://github.com/Netflix/Hystrix/wiki/Configuration

HystrixProperty參考代碼地址:http://www.programcreek.com/java-api-examples/index.php?source_dir=Hystrix-master/hystrix-contrib/hystrix-javanica/src/test/java/com/netflix/hystrix/contrib/javanica/test/common/configuration/command/BasicCommandPropertiesTest.java

(一)Command Properties

以下屬性控制HystrixCommand行為:

1、Execution

以下屬性控制HystrixCommand.run()如何執行。

參數

描述

默認值

execution.isolation.strategy

隔離策略,有THREADSEMAPHORE

THREAD - 它在單獨的線程上執行,並發請求受線程池中的線程數量的限制
SEMAPHORE - 它在調用線程上執行,並發請求受到信號量計數的限制

默認使用THREAD模式,以下幾種場景可以使用SEMAPHORE模式:

只想控制並發度

外部的方法已經做了線程隔離

調用的是本地方法或者可靠度非常高、耗時特別小的方法(如medis

execution.isolation.thread.timeoutInMilliseconds

超時時間

默認值:1000

THREAD模式下,達到超時時間,可以中斷

SEMAPHORE模式下,會等待執行完成后,再去判斷是否超時

設置標准:

retry99meantime+avg meantime

沒有retry99.5meantime

execution.timeout.enabled

HystrixCommand.run()執行是否應該有超時。

默認值:true

execution.isolation.thread.interruptOnTimeout

在發生超時時是否應中斷HystrixCommand.run()執行。

默認值:true

THREAD模式有效

execution.isolation.thread.interruptOnCancel

當發生取消時,執行是否應該中斷。

默認值為false

THREAD模式有效

execution.isolation.semaphore.maxConcurrentRequests

設置在使用時允許到HystrixCommand.run()方法的最大請求數。

默認值:10

SEMAPHORE模式有效

2、Fallback

以下屬性控制HystrixCommand.getFallback()如何執行。這些屬性適用於ExecutionIsolationStrategy.THREADExecutionIsolationStrategy.SEMAPHORE

參數

描述

默認值

fallback.isolation.semaphore.maxConcurrentRequests

設置從調用線程允許HystrixCommand.getFallback()方法的最大請求數。

SEMAPHORE模式有效

默認值:10

fallback.enabled

確定在發生失敗或拒絕時是否嘗試調用HystrixCommand.getFallback()。

默認值為true

3、Circuit Breaker

斷路器屬性控制HystrixCircuitBreaker的行為。

參數

描述

默認值

circuitBreaker.enabled

確定斷路器是否用於跟蹤運行狀況和短路請求(如果跳閘)。

默認值為true

circuitBreaker.requestVolumeThreshold

熔斷觸發的最小個數/10s

默認值:20

circuitBreaker.sleepWindowInMilliseconds

熔斷多少秒后去嘗試請求

默認值:5000

circuitBreaker.errorThresholdPercentage

失敗率達到多少百分比后熔斷

默認值:50

主要根據依賴重要性進行調整

circuitBreaker.forceOpen

 

屬性如果為真,強制斷路器進入打開(跳閘)狀態,其中它將拒絕所有請求。

默認值為false

此屬性優先於circuitBreaker.forceClosed

circuitBreaker.forceClosed

該屬性如果為真,則迫使斷路器進入閉合狀態,其中它將允許請求,而不考慮誤差百分比。

默認值為false

如果是強依賴,應該設置為true

circuitBreaker.forceOpen屬性優先,因此如果forceOpen設置為true,此屬性不執行任何操作。

4、Metrics

以下屬性與從HystrixCommandHystrixObservableCommand執行捕獲指標有關。

參數

描述

默認值

metrics.rollingStats.timeInMilliseconds

此屬性設置統計滾動窗口的持續時間(以毫秒為單位)。對於斷路器的使用和發布Hystrix保持多長時間的指標。

默認值:10000

metrics.rollingStats.numBuckets

此屬性設置rollingstatistical窗口划分的桶數。

以下必須為true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否則將拋出異常。

默認值:10

metrics.rollingPercentile.enabled

此屬性指示是否應以百分位數跟蹤和計算執行延遲。 如果禁用它們,則所有摘要統計信息(平均值,百分位數)都將返回-1

默認值為true

metrics.rollingPercentile.timeInMilliseconds

此屬性設置滾動窗口的持續時間,其中保留執行時間以允許百分位數計算,以毫秒為單位。

默認值:60000

metrics.rollingPercentile.numBuckets

此屬性設置rollingPercentile窗口將划分的桶的數量。

以下內容必須為true - “metrics.rollingPercentile.timeInMilliseconds%metrics.rollingPercentile.numBuckets == 0” -否則將拋出異常。

默認值:6

metrics.rollingPercentile.bucketSize

此屬性設置每個存儲桶保留的最大執行次數。如果在這段時間內發生更多的執行,它們將繞回並開始在桶的開始處重寫。

默認值:100

metrics.healthSnapshot.intervalInMilliseconds

此屬性設置在允許計算成功和錯誤百分比並影響斷路器狀態的健康快照之間等待的時間(以毫秒為單位)。

默認值:500

5、Request Context

這些屬性涉及HystrixCommand使用的HystrixRequestContext功能。

參數

描述

默認值

requestCache.enabled

HystrixCommand.getCacheKey()是否應與HystrixRequestCache一起使用,以通過請求范圍的緩存提供重復數據刪除功能。

默認值為true

requestLog.enabled

HystrixCommand執行和事件是否應記錄到HystrixRequestLog

默認值為true

(二Collapser Properties

下列屬性控制HystrixCollapser行為。

參數

描述

默認值

maxRequestsInBatch

此屬性設置在觸發批處理執行之前批處理中允許的最大請求數。

Integer.MAX_VALUE

timerDelayInMilliseconds

此屬性設置創建批處理后觸發其執行的毫秒數。

默認值:10

requestCache.enabled

此屬性指示是否為HystrixCollapser.execute()和HystrixCollapser.queue()調用啟用請求高速緩存。

默認值:true

(三)ThreadPool Properties

以下屬性控制Hystrix命令在其上執行的線程池的行為。

大多數時候,默認值為10的線程會很好(通常可以做得更小)。

參數

描述

默認值

coreSize

線程池coreSize

默認值:10

設置標准:qps*99meantime+breathing room

maximumSize

此屬性設置最大線程池大小。 這是在不開始拒絕HystrixCommands的情況下可以支持的最大並發數。 請注意,此設置僅在您還設置allowMaximumSizeToDivergeFromCoreSize時才會生效。

默認值:10

maxQueueSize

請求等待隊列

默認值:-1

如果使用正數,隊列將從SynchronizeQueue改為LinkedBlockingQueue

queueSizeRejectionThreshold

此屬性設置隊列大小拒絕閾值 - 即使未達到maxQueueSize也將發生拒絕的人為最大隊列大小。 此屬性存在,因為BlockingQueuemaxQueueSize不能動態更改,我們希望允許您動態更改影響拒絕的隊列大小。

默認值:5

注意:如果maxQueueSize == -1,則此屬性不適用。

keepAliveTimeMinutes

此屬性設置保持活動時間,以分鍾為單位。

默認值:1

allowMaximumSizeToDivergeFromCoreSize

此屬性允許maximumSize的配置生效。 那么該值可以等於或高於coreSize。 設置coreSize <maximumSize會創建一個線程池,該線程池可以支持maximumSize並發,但在相對不活動期間將向系統返回線程。 (以keepAliveTimeInMinutes為准)

默認值:false

metrics.rollingStats.timeInMilliseconds

此屬性設置statistical rolling窗口的持續時間(以毫秒為單位)。 這是為線程池保留多長時間。

默認值:10000

metrics.rollingStats.numBuckets

此屬性設置滾動統計窗口划分的桶數。
注意:以下必須為true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否則將引發異常。

默認值:10

(四)其他 

參數

描述

默認值

groupKey

表示所屬的group,一個group共用線程池

默認值:getClass().getSimpleName();

commandKey

 

默認值:當前執行方法名

 

 轉載出處:http://blog.csdn.net/tongtong_use/article/details/78611225


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM