@FeignClient注解自定義接口超時時間


問題描述

  每個微服務都有統一的接口超時時間設定,但也存在一些特殊的業務場景,其接口需要較長的超時時間,比如:導出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,效率高,錯誤少,回家早...


免責聲明!

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



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