Feign超時不生效問題


使用Feign作為RPC調用組件,可以配置連接超時和讀取超時兩個參數


使用Feign配置超時需要注意:Feign內部使用了負載均衡組件Ribbon,
而Ribbon本身也有連接超時和讀取超時相關配置
一、默認不配置相關參數的情況下:


通過測試發現超時讀取使用了Ribbon的默認超時時間,即1s。此時Feign的默認超時時間
60s不會生效。

源碼分析:Ribbon的默認超時時間 1s。 Feign的默認讀取超時時間60s

 

 

 

 


二、 配置相關參數的情況下:


Fegin可以配置全局超時時間:
feign.client.config.default.readTimeout=3000
feign.client.config.default.connectTimeout=3000
注意:如果只配置讀超時,只feign.client.config.default.readTimeout=3000 是不會生效的
要配置Feign讀取超時,必須同時配置連接超時

若是想針對單獨的Feign Client(client-name)設置超時時間,可以把default替換為Client的name
例如:
feign.client.config.client-name.readTimeout=3000
feign.client.config.client-name.connectTimeout=3000
單獨的超時可覆蓋全局超時

同時配置Feign和Ribbon的參數

feign.client.config.default.readTimeout=3000
feign.client.config.default.connectTimeout=3000
ribbon.ReadTimeout=4000
ribbon.ConnectTimeout=4000
最終生效的是Feign的超時

源碼分析:同時配置Feign和Ribbon的超時,以Feign為准
在LoadBalancerFeignClient源碼
如果Request.Options不是默認值,就會創建一個FeignOptionsClientConfig代替原來Ribbon的DefaultClientConfigImpl,導致Ribbon的配置被Feign覆蓋

 


免責聲明!

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



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