Hystrix如何使用不少說明,看了不少博客,卻發現能說明一些簡單概念的文章就沒有.git
因此本文不太回去說如何使用 Hystrix ,可是會簡明的說一下 一些概念github
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ProductInfoService"))後端
.andCommandKey(HystrixCommandKey.Factory.asKey("GetProductInfoCommand"))緩存
.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("GetProductInfoPool"))ui
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()線程
.withCoreSize(3)blog
.withMaximumSize(30)接口
.withAllowMaximumSizeToDivergeFromCoreSize(true)隊列
.withKeepAliveTimeMinutes(1)ci
.withMaxQueueSize(12)
.withQueueSizeRejectionThreshold(15))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerRequestVolumeThreshold(30)
.withCircuitBreakerErrorThresholdPercentage(40)
.withCircuitBreakerSleepWindowInMilliseconds(3000)
.withExecutionTimeoutInMilliseconds(500)
.withFallbackIsolationSemaphoreMaxConcurrentRequests(30))
);
以上代碼是 Hystrix的一些設置.
HystrixCommandGroupKey.Factory.asKey("ProductInfoService")
HystrixCommandGroupKey 是用來 聲明一個服務接口的,,默認 HystrixCommandGroupKey 就是線程池名稱
HystrixCommandKey 默認是 類名,通常設置爲類名+Comand就 ok
HystrixThreadPoolKey 用來設置線程池 的,若是不設置 ,默認 HystrixCommandGroupKey 就是線程池名稱
withCoreSize 設置線程池的線程數量
withMaximumSize 設置線程池的最大數量
withAllowMaximumSizeToDivergeFromCoreSize 容許動態調整線程池的數量
withKeepAliveTimeMinutes 線程池中的線程多久不使用就回收
withMaxQueueSize 設置緩存隊列的最大大小
withQueueSizeRejectionThreshold 設置緩存隊列的大小
withMaxQueueSize withQueueSizeRejectionThreshold 哪一個值小,哪一個就是 緩存隊列的大小
withCircuitBreakerRequestVolumeThreshold 設置斷路器10秒內的 流量閥值
舉個例子,可能看起來是這樣子的,要求在10s內,通過短路器的流量必須達到30個;在10s內,通過短路器的流量才10個,那麼根本不會去判斷要不要短路
withCircuitBreakerErrorThresholdPercentage 斷路器統計到的異常調用的佔比超過了必定的閾值
好比說在10s內,通過短路器的流量(你,只要執行一個command,這個請求就必定會通過短路器),達到了30個;同時其中異常的訪問數量,佔到了必定的比例,好比說40%的請求都是異常(報錯,timeout,reject),會開啓短路
withCircuitBreakerSleepWindowInMilliseconds: 斷路器打開,嘗試 會half-open 請求的等待時間
斷路器打開的時候,全部通過該斷路器的請求所有被短路,不調用後端服務,直接走fallback降級
通過了一段時間以後,HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds(),會half-open,讓一條請求通過短路器,看能不能正常調用。若是調用成功了,那麼就自動恢復,轉到close狀態
短路器,會自動恢復的,half-open,半開狀態
使用 github地址:
本人以爲 github 已經說明的很是詳細了
https://github.com/Netflix/Hystrix/wiki/How-To-Use#Hello-World