feign使用hystrix熔斷的配置


熔斷器hystrix

在分布式系統中,每個服務都可能會調用很多其他服務,被調用的那些服務就是依賴服務,有的時候某些依賴服務出現故障也是很正常的。
Hystrix 可以讓我們在分布式系統中對服務間的調用進行控制,加入一些調用延遲或者依賴故障的容錯機制。
Hystrix 通過將依賴服務進行資源隔離,進而阻止某個依賴服務出現故障時在整個系統所有的依賴服務調用中進行蔓延;同時Hystrix 還提供故障時的 fallback 降級機制。
總而言之,Hystrix 通過這些方法幫助我們提升分布式系統的可用性和穩定性。

feign開啟熔斷功能

feign可以用okhttp代替傳統的httpclient,性能更好

feign:
  hystrix:
    enabled: true
  httpclient:
    enabled: false
  okhttp:
    enabled: true

ribbon這塊也可以對okhttp進行配置

ribbon.httpclient.enabled=false
ribbon.okhttp.enabled=true

hystrix熔斷器可以對請求進行重試,對超時時間進行配置等。

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上使用fallback之前,當服務端出現問題時,可以快速響應,並且不會拋出異常,就象為feign加了一層try...cache一樣。

使用方式

開始feign.hystrix的功能

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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM