一、什麼情況下會觸發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
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 | 隔離政策,有THREAD和SEMAPHORE THREAD - 它在單獨的線程上執行,并發請求受線程池中的線程數量的限制 SEMAPHORE - 它在調用線程上執行,并發請求受到信号量計數的限制 | 預設使用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 | 此屬性設定滾動統計視窗劃分的桶數。 注意:以下必須為true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否則将引發異常。 | 預設值:10 |
(四)其他
參數 | 描述 | 預設值 |
groupKey | 表示所屬的group,一個group共用線程池 | 預設值:getClass().getSimpleName(); |
commandKey | 預設值:目前執行方法名 |
轉載請注明出處:http://blog.csdn.net/tongtong_use/article/details/78611225