一、什么情況下會觸發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)
(1)hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
在調用方配置,被該調用方的所有方法的超時時間都是該值,優先級低於下邊的指定配置
(2)hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
在調用方配置,被該調用方的指定方法(HystrixCommandKey方法名)的超時時間是該值
線程池核心線程數
hystrix.threadpool.default.coreSize(默認為10)
Queue
(1)hystrix.threadpool.default.maxQueueSize(最大排隊長度。默認-1,使用SynchronousQueue。其他值則使用 LinkedBlockingQueue。如果要從-1換成其他值則需重啟,即該值不能動態調整,若要動態調整,需要使用到下邊這個配置)
(2)hystrix.threadpool.default.queueSizeRejectionThreshold(排隊線程數量閾值,默認為5,達到時拒絕,如果配置了該選項,隊列的大小是該隊列)
注意:如果maxQueueSize=-1的話,則該選項不起作用
斷路器
(1)hystrix.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個,斷路器開。
(2)hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds(短路多久以后開始嘗試是否恢復,默認5s)
(3)hystrix.command.default.circuitBreaker.errorThresholdPercentage(出錯百分比閾值,當達到此閾值后,開始短路。默認50%)
fallback
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests(調用線程允許請求HystrixCommand.GetFallback()的最大數量,默認10。超出時將會有異常拋出,注意:該項配置對於THREAD隔離模式也起作用)
五、屬性配置參數
參數說明英文地址:https://github.com/Netflix/Hystrix/wiki/Configuration
(一)Command Properties
以下屬性控制HystrixCommand行為:
1、Execution
以下屬性控制HystrixCommand.run()如何執行。
參數 |
描述 |
默認值 |
execution.isolation.strategy |
隔離策略,有THREAD和SEMAPHORE THREAD - 它在單獨的線程上執行,並發請求受線程池中的線程數量的限制 |
默認使用THREAD模式,以下幾種場景可以使用SEMAPHORE模式: 只想控制並發度 外部的方法已經做了線程隔離 調用的是本地方法或者可靠度非常高、耗時特別小的方法(如medis) |
execution.isolation.thread.timeoutInMilliseconds |
超時時間 |
默認值:1000 在THREAD模式下,達到超時時間,可以中斷 在SEMAPHORE模式下,會等待執行完成后,再去判斷是否超時 設置標准: 有retry,99meantime+avg meantime 沒有retry,99.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.THREAD和ExecutionIsolationStrategy.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
以下屬性與從HystrixCommand和HystrixObservableCommand執行捕獲指標有關。
參數 |
描述 |
默認值 |
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也將發生拒絕的人為最大隊列大小。 此屬性存在,因為BlockingQueue的maxQueueSize不能動態更改,我們希望允許您動態更改影響拒絕的隊列大小。 |
默認值:5 注意:如果maxQueueSize == -1,則此屬性不適用。 |
keepAliveTimeMinutes |
此屬性設置保持活動時間,以分鍾為單位。 |
默認值:1 |
allowMaximumSizeToDivergeFromCoreSize |
此屬性允許maximumSize的配置生效。 那么該值可以等於或高於coreSize。 設置coreSize <maximumSize會創建一個線程池,該線程池可以支持maximumSize並發,但在相對不活動期間將向系統返回線程。 (以keepAliveTimeInMinutes為准) |
默認值:false |
metrics.rollingStats.timeInMilliseconds |
此屬性設置statistical rolling窗口的持續時間(以毫秒為單位)。 這是為線程池保留多長時間。 |
默認值:10000 |
metrics.rollingStats.numBuckets |
此屬性設置滾動統計窗口划分的桶數。 |
默認值:10 |
(四)其他
參數 |
描述 |
默認值 |
groupKey |
表示所屬的group,一個group共用線程池 |
默認值:getClass().getSimpleName(); |
commandKey |
|
默認值:當前執行方法名 |
轉載出處:http://blog.csdn.net/tongtong_use/article/details/78611225