Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法
在使用Feign Client時(shí),可以通過兩種方式來設(shè)置超時(shí)時(shí)間:
1.針對(duì)整個(gè)Feign Client設(shè)置超時(shí)時(shí)間
可以在Feign Client的配置類中通過修改Request.Options對(duì)象來設(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屬性來指定一個(gè)配置類,然后在配置類中通過修改Request.Options對(duì)象來設(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í)間是無效的。如果需要設(shè)置整個(gè)請(qǐng)求-響應(yīng)的超時(shí)時(shí)間,可以通過使用Hystrix或其他方式來實(shí)現(xiàn)。
不生效可能得原因
搜索一下項(xiàng)目里有沒有對(duì)Options 進(jìn)行重寫,如下所示:
@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)制重寫它才會(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中的HashSet、LinkedHashSet集合解析
這篇文章主要介紹了Java中的HashSet、LinkedHashSet集合解析,與HashSet不同的是,LinkedHashSet在內(nèi)部使用了一個(gè)雙向鏈表來維護(hù)元素的順序,因此它可以保持元素的插入順序,這使得LinkedHashSet在需要保持元素順序的場景下非常有用,需要的朋友可以參考下2023-11-11
Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析
這篇文章主要介紹了Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析,在Java中想實(shí)現(xiàn)分頁功能有幾種常用的方法,今天我們就來詳細(xì)解析一下,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11
springboot結(jié)合shiro實(shí)現(xiàn)身份認(rèn)證的實(shí)戰(zhàn)
本文主要介紹了springboot結(jié)合shiro實(shí)現(xiàn)身份認(rèn)證的實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
SpringBoot應(yīng)用內(nèi)存占用分析與優(yōu)化指南
本文詳細(xì)分析了SpringBoot應(yīng)用內(nèi)存占用過高的原因,主要包括JVM堆內(nèi)存、元空間、線程棧內(nèi)存和直接內(nèi)存等,通過優(yōu)化Tomcat線程池配置、調(diào)整JVM參數(shù),并結(jié)合監(jiān)控機(jī)制,可以有效降低應(yīng)用內(nèi)存占用,提高性能和穩(wěn)定性,需要的朋友可以參考下2026-03-03
SpringBoot中的MongoTemplate的各種條件查詢示例詳解
這篇文章主要介紹了SpringBoot中的MongoTemplate的各種條件查詢示例詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友參考下吧2024-01-01
基于RecyclerChart的KLine的繪制Scale詳解
這篇文章主要為大家詳細(xì)介紹了基于RecyclerChart實(shí)現(xiàn)KLine繪制Scale的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
java?HttpURLConnection類的disconnect方法與http長連接詳解
這篇文章主要介紹了java?HttpURLConnection類的disconnect方法與http長連接,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04

