7.1 四種情況fallback降級機制
(1)[error] Hystrix調用各種接口,或者訪問外部依賴,mysql,redis,zookeeper,kafka,等等,如果出現了任何異常的情況
比如說報錯了,訪問mysql報錯,redis報錯,zookeeper報錯,kafka報錯。
(2)[reject] 對每個外部依賴,無論是服務接口,中間件,資源隔離,對外部依賴只能用一定量的資源去訪問,線程池/信號量,如果資源池已滿。
(3)[timeout]訪問外部依賴的時候,訪問時間過長,可能就會導致超時,報一個TimeoutException異常
上述三種情況,都是我們說的異常情況,對外部依賴的東西訪問的時候出現了異常,發送異常事件到短路器中去進行統計。
(4)[circuit breaker]如果短路器發現異常事件的佔比達到了一定的比例,直接開啓短路,circuit breaker
上述四種情況,都會去調用fallback降級機制
7.2 兩種經典的降級機制:純內存數據,默認值
HystrixCommand是實現getFallback方法
HystrixObservableCommand是實現resumeWithFallback方法
7.3 HystrixCommand.getFallback()最大允許的併發請求數量
fallback.isolation.semaphore.maxConcurrentRequests
這個參數設置了HystrixCommand.getFallback()最大允許的併發請求數量,默認值是10,也是通過semaphore信號量的機制去限流
如果超出了這個最大值,那麼直接被reject
HystrixCommandProperties.Setter()
.withFallbackIsolationSemaphoreMaxConcurrentRequests(int value)
//這個參數設置了HystrixCommand.getFallback()最大允許的併發請求數量,默認值是10,也是通過semaphore信號量的機制去限流 //如果超出了這個最大值,那麼直接被reject ==>fallback.isolation.semaphore.maxConcurrentRequests .withFallbackIsolationSemaphoreMaxConcurrentRequests(10) |