Feign Client 超時時間配置


  在Spring Boot微服務架構中,大部分公司都是利用Open Feign進行服務間的調用,而在業務場景比較簡單的時候,使用默認配置是不會遇到多大問題的。但是如果業務比較復雜,服務要進行比較繁雜的業務計算,那后台很有可能會出現Read Timeout這個異常,因此定制化配置超時時間就有必要了。

  影響到feign接口超時時間的主要有三類配置:feign、ribbon、hystrix和OKhttp(若配置)。

feign配置:

feign:
    client:
        config:
            default:  // 所有服務級別設置,default為任意服務
                connectTimeout: 毫秒時間,建立連接的超時時間,一般只在發現服務時用到
                readTimeout: 毫秒時間 ,接口請求的超時時間
            remote-server-name: // contextId屬性,指定調用remote-server-name服務時的超時時間
                connectTimeout: 200
                readTimeout: 3000

ribbon配置

ribbon:
    ReadTimeout: 毫秒時間, 同feign的
    ConnectTimeout:毫秒時間 , 同feign的

  feign和ribbon的配置二選一即可,因為這兩個配置都相當於是ribbon的配置,不同點在於feign的配置在ribbon的基礎上做了擴展,可以支持配置服務級別的超時時間。如果feignClient中使用了url,超時時間也可以生效,但是,即便是設置了ribbon url,其超時時間卻不會生效,因為指定了url就不需要走ribbon的負載均衡邏輯。

  Ribbon和Feign都有全局的配置和局部的配置,但是它們的優先級不同,springCloud選擇兩種配置的優先級順序為:Feign局部配置 > Feign全局配置 > Ribbon局部配置 > Ribbon全局配置,所以如果一個服務既配置了Ribbon超時時間也配置了Feign超時時間,那么Feign局部配置會覆蓋掉其它配置。

hystrix

hystrix:
  command:
    default:  #這個代表接口,default為任意接口, 可以配置為指定接口
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 毫秒時間

  Hystrix配置也分為全局和局部,只需要替換default為指定服務名即為局部配置。

  hystrix配置的超時時間理論上應該要比 feign和ribbon的要大,因為feign和ribbon可以配置失敗重試。當然最終的超時時間是以feign(或ribbon)和hystrix中最小時間為准。所以在單獨設置某個接口的超時時間時,如果設置的超時時間比feign的要小,則可以生效。如果設置的時間比feign的要大,則會以feign的超時時間為准。

OKhttp配置

如果feign client結合OKhttp使用,則OKhttp也需要配置超時時間,關於如何配置,請猛戳《OKhttp超時時間配置》。

小結

如何配置好Hystrix和Ribbon的超時時間呢?其實是有套路的,因為Feign的請求其實是Hystrix+Ribbon。Hystrix在最外層,然后再到Ribbon,最后里面的是http請求。故,Hystrix的熔斷時間必須大於Ribbon的 (ConnectTimeout + ReadTimeout);而如果Ribbon開啟了重試機制,還需要乘以對應的重試次數,保證在Ribbon里的請求還沒結束時,Hystrix的熔斷時間不會超時。


超時時間關聯關系

為了簡單,我們在工作中,如無必要,僅僅配置feign和OKhttp的過期時間即可,無需都配置。

Reference


免責聲明!

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



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