Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法
在使用Feign Client時(shí),可以通過(guò)兩種方式來(lái)設(shè)置超時(shí)時(shí)間:
1.針對(duì)整個(gè)Feign Client設(shè)置超時(shí)時(shí)間
可以在Feign Client的配置類中通過(guò)修改Request.Options對(duì)象來(lái)設(shè)置超時(shí)時(shí)間。Request.Options對(duì)象有兩個(gè)屬性,connectTimeoutMillis用于設(shè)置連接超時(shí)時(shí)間,readTimeoutMillis用于設(shè)置讀取超時(shí)時(shí)間。
下面是一個(gè)示例:
@Configuration public class FeignClientConfig { @Bean public Request.Options requestOptions() { return new Request.Options(5000, 5000); } }
在上面的示例中,連接超時(shí)和讀取超時(shí)時(shí)間都設(shè)置為5000毫秒。
針對(duì)單個(gè)Feign接口方法設(shè)置超時(shí)時(shí)間
可以在Feign接口方法上使用@FeignClient注解的configuration屬性來(lái)指定一個(gè)配置類,然后在配置類中通過(guò)修改Request.Options對(duì)象來(lái)設(shè)置超時(shí)時(shí)間。
下面是一個(gè)示例:
@FeignClient(name = "example-client") public interface ExampleClient { @GetMapping("/example") @Headers("Content-Type: application/json") @RequestLine("GET /example") void getExample(Request.Options options); } //自定義接口超時(shí)時(shí)間(20秒) Request.Options options =new Request.Options(20, TimeUnit.SECONDS,20,TimeUnit.SECONDS,true); // 執(zhí)行調(diào)用 exampleClient .getExample(options );
在上面的示例中,ExampleClient接口中的getExample()方法的超時(shí)時(shí)間被配置為20秒。
需要注意的是,F(xiàn)eign Client的超時(shí)時(shí)間設(shè)置只對(duì)請(qǐng)求的連接和讀取階段有效,對(duì)于響應(yīng)的處理時(shí)間是無(wú)效的。如果需要設(shè)置整個(gè)請(qǐng)求-響應(yīng)的超時(shí)時(shí)間,可以通過(guò)使用Hystrix或其他方式來(lái)實(shí)現(xiàn)。
不生效可能得原因
搜索一下項(xiàng)目里有沒(méi)有對(duì)Options 進(jìn)行重寫(xiě),如下所示:
@Bean public Options options() { return new Options(); }
Options 類
public static class Options { private final int connectTimeoutMillis; private final int readTimeoutMillis; public Options(int connectTimeoutMillis, int readTimeoutMillis) { this.connectTimeoutMillis = connectTimeoutMillis; this.readTimeoutMillis = readTimeoutMillis; } public Options() { this(10000, 60000); } public int connectTimeoutMillis() { return this.connectTimeoutMillis; } public int readTimeoutMillis() { return this.readTimeoutMillis; } }
可以看到Options 類的默認(rèn)構(gòu)造函數(shù)里connectTimeout為10000ms,readTimeout為60000ms。你的配置文件里面的設(shè)置如果不生效可能就是被覆蓋了。
feign: client: config: default: connectTimeout: 5000 readTimeout: 150000
1.我們需要強(qiáng)制重寫(xiě)它才會(huì)生效
@Primary @Bean public Request.Options requestOptions(ConfigurableEnvironment env) { String connectTime = env.getProperty("feign.client.config.default.connectTimeout"); String readTime = env.getProperty("feign.client.config.default.readTimeout"); if (connectTime != null && readTime != null) { Integer connectTimeout = Integer.valueOf(connectTime); Integer readTimeout = Integer.valueOf(readTime); return new Request.Options(connectTimeout, readTimeout); } return new Request.Options(); }
2.單獨(dú)針對(duì)某個(gè)方法設(shè)置超時(shí)時(shí)間。
@FeignClient(name = "example-client") public interface ExampleClient { @GetMapping("/example") @Headers("Content-Type: application/json") @RequestLine("GET /example") void getExample(Request.Options options,String params); } //自定義接口超時(shí)時(shí)間(20秒) Request.Options options =new Request.Options(20, TimeUnit.SECONDS,20,TimeUnit.SECONDS,true); // 執(zhí)行調(diào)用 exampleClient .getExample(options );
到此這篇關(guān)于Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法的文章就介紹到這了,更多相關(guān)Feign Client超時(shí)設(shè)置不生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解java并發(fā)之重入鎖-ReentrantLock
這篇文章主要介紹了java并發(fā)之重入鎖-ReentrantLock,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03MyBatis批量插入數(shù)據(jù)到Oracle數(shù)據(jù)庫(kù)中的兩種方式(實(shí)例代碼)
本文通過(guò)實(shí)例代碼給大家分享了MyBatis批量插入數(shù)據(jù)到Oracle數(shù)據(jù)庫(kù)中的兩種方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09Java實(shí)現(xiàn)拓?fù)渑判虻氖纠a
這篇文章我們要講的是拓?fù)渑判?,這是一個(gè)針對(duì)有向無(wú)環(huán)圖的算法,主要是為了解決前驅(qū)后繼的關(guān)系,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算(相當(dāng)全面)
這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算的相關(guān)資料,Java中的Date類是用來(lái)表示日期和時(shí)間的類,它提供了一些常用的方法來(lái)處理日期和時(shí)間的操作,需要的朋友可以參考下2023-12-12Java數(shù)據(jù)結(jié)構(gòu)專題解析之棧和隊(duì)列的實(shí)現(xiàn)
從數(shù)據(jù)結(jié)構(gòu)的定義看,棧和隊(duì)列也是一種線性表。其不同之處在于棧和隊(duì)列的相關(guān)運(yùn)算具有特殊性,只是線性表相關(guān)運(yùn)算的一個(gè)子集。更準(zhǔn)確的說(shuō),一般線性表的插入、刪除運(yùn)算不受限制,而棧和隊(duì)列上的插入刪除運(yùn)算均受某種特殊限制。因此,棧和隊(duì)列也稱作操作受限的線性表2021-10-10關(guān)于@Component注解的含義說(shuō)明
這篇文章主要介紹了關(guān)于@Component注解的含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解
Stream是Java8中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過(guò)濾和映射數(shù)據(jù)等操作,下面這篇文章主要給大家介紹了關(guān)于Java中List使用stream流轉(zhuǎn)成map的幾種方式,需要的朋友可以參考下2023-04-04idea項(xiàng)目結(jié)構(gòu)中不顯示out文件夾的解決
本文通過(guò)圖片的方式詳細(xì)解釋操作步驟,使讀者能夠更直觀更方便地理解和執(zhí)行操作,同時(shí),文章末尾祝福讀者步步高升,一帆風(fēng)順,展現(xiàn)了作者的人情味和親和力,整體來(lái)說(shuō),這是一篇簡(jiǎn)單易懂、實(shí)用性強(qiáng)的操作指南2024-10-10