問題描述
每個微服務都有統一的接口超時時間設定,但也存在一些特殊的業務場景,其接口需要較長的超時時間,比如:導出excel報表、上傳文件、拉取業務報表數據等等。此時,默認的超時設置就不能滿足需求,故需要設置各自的超時時間。
問題分析
使用@FeignClient 時,可以通過contextId屬性為不同的接口設置不同的超時時間,在config屬性中指定某服務的超時時間即可。
feign:
client:
config:
default: // 所有服務級別設置,default為任意服務,可以指定調用某服務時的超時時間
connectTimeout: 毫秒時間,建立連接的超時時間,一般只在發現服務時用到
readTimeout: 毫秒時間 ,建立連接,從服務端讀取到可用數據的超時時間
remote-server-name: //contextId屬性,指定調用remote-server-name服務時的超時時間
connectTimeout: 200
readTimeout: 3000
connectTimeout:單位毫秒,指定建立連接的超時時間,一般只在發現服務時用到。
readTimeout: 單位毫秒,建立連接后,從服務端讀取到可用數據的超時時間。
設置超時時間時,需要注意以下兩點:
♥只設置connectTimeout或者readTimeout時,配置不生效,兩個值必須同時設置。
♥feign默認的connectTimeout時長是10s,readTimeout時長是60s,上面配置的值會覆蓋默認值。
問題解決
把上述源碼中的 remote-server-name
改為 remote-server-user
,則在如下調用中,就設置了調用 remote-server-user
服務時的超時時間:
@FeignClient(value = "user",contextId ="remote-server-user")
public interface UserFeignService {
@RequestMapping(value = { "/getUserById" })
User getUserById(@RequestParam("userId") final Long userId);
}
小結
工欲善其事,必先利其器。性能與效率是程序猿永恆的追求,對代碼如此,對日常搬磚亦如此。Wiener只願各位同仁Work Life Balance,效率高,錯誤少,回家早...