使用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覆蓋