在分佈式系統中,每一個服務均可能會調用不少其餘服務,被調用的那些服務就是依賴服務,有的時候某些依賴服務出現故障也是很正常的。
Hystrix 能夠讓咱們在分佈式系統中對服務間的調用進行控制,加入一些調用延遲或者依賴故障的容錯機制。
Hystrix 經過將依賴服務進行資源隔離,進而阻止某個依賴服務出現故障時在整個系統全部的依賴服務調用中進行蔓延;同時Hystrix 還提供故障時的 fallback 降級機制。
總而言之,Hystrix 經過這些方法幫助咱們提高分佈式系統的可用性和穩定性。api
feign能夠用okhttp代替傳統的httpclient,性能更好app
feign: hystrix: enabled: true httpclient: enabled: false okhttp: enabled: true
ribbon這塊也能夠對okhttp進行配置分佈式
ribbon.httpclient.enabled=false ribbon.okhttp.enabled=true
hystrix熔斷器能夠對請求進行重試,對超時時間進行配置等。ide
hystrix: command: default: execution: timeout: enabled: true isolation: thread: #目前有兩個容器實例,單個請求超時5s,+重試>10s,超15s則熔斷 timeoutInMilliseconds: 15000 ribbon: #ribbon請求鏈接的超時時間- 限制3秒內必須請求到服務,並不限制服務處理的返回時間 connectTimeout: 3000 #請求處理的超時時間 下級服務響應最大時間,超出時間消費方(路由也是消費方)返回timeout,超時時間不可大於斷路器的超時時間 readTimeout: 5000
feign上使用fallback以前,當服務端出現問題時,能夠快速響應,而且不會拋出異常,就象爲feign加了一層try...cache同樣。性能
開始feign.hystrix的功能code
feign: hystrix: enabled: true httpclient: enabled: false okhttp: enabled: true
當feign的服務端出現問題時,返回值爲fallback的值,你能夠本身定,例如:對象
@Component @Slf4j public class UserClientFallback implements UserClient { @Override public Map getUser(Long id) { logger.info("getUser.error"); return null; } @Override public Map getUsers() { logger.info("getUsers.error.retrun.default"); return ImmutableMap.of("name", "lind", "sex", "male"); } }
調用userclient失敗以後,將返回默認的對象資源
@GetMapping("/api/v1/test") public ResponseEntity<?> userGet() { Map users= userClient.getUsers(); return ResponseUtils.okMessage("success"); }
結果將是默認值路由
{"status":200,"message":"操做成功","data":{"name":"lind","sex":"male"},"totalRecords":0}