Feign Client 超時時間配置

2022-09-19 22:00:21 字數 1897 閱讀 3204

在spring boot微服務架構中,大部分公司都是利用open feign進行服務間的呼叫,而在業務場景比較簡單的時候,使用預設配置是不會遇到多大問題的。但是如果業務比較複雜,服務要進行比較繁雜的業務計算,那後台很有可能會出現read timeout這個異常,因此定製化配置超時時間就有必要了。

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

feign:

client:

config:

default: // 所有服務級別設定,default為任意服務

connecttimeout: 毫秒時間,建立連線的超時時間,一般只在發現服務時用到

readtimeout: 毫秒時間 ,介面請求的超時時間

remote-server-name: // contextid屬性,指定呼叫remote-server-name服務時的超時時間

connecttimeout: 200

readtimeout: 3000

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:

command:

default: #這個代表介面,default為任意介面, 可以配置為指定介面

execution:

isolation:

thread:

timeoutinmilliseconds: 毫秒時間

hystrix配置也分為全域性和區域性,只需要替換default為指定服務名即為區域性配置。

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

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

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

超時時間關聯關係

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

Feign Client的超時時間

在spring cloud微服務架構中,大部分公司都是利用open feign進行服務間的呼叫,而比較簡單的業務使用預設配置是不會有多大問題的,但是如果是業務比較複雜,服務要進行比較繁雜的業務計算,那後台很有可能會出現read timeout這個異常,因此定製化配置超時時間就有必要了。預設開啟 預設...

超時時間 Session

在web.xml裡的配置 單位分鐘 1 23 4 session config 5 session timeout 15 session timeout 6session config 7.89 view code 在配置servlet的時候指定初始化引數決定超時時間 單位秒 1 servlet 2...

設定ssh超時時間

方法一 最近公司剛剛買了一台hyper v的vps,但是連線ssh伺服器剛剛離開一會就斷開,不得不需要反覆連線伺服器,為了使ssh伺服器可以保持足夠的連線時間,大家可以按以下方法設定 基於安全的理由,如果使用者連線到 ssh server 後閒置,ssh server 會在超過特定時間後自動終止 s...