在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...