当前位置: 首页 > news >正文

Feign Client超时时间设置不生效问题

在使用Feign Client时,可以通过两种方式来设置超时时间:

  1. 针对整个Feign Client设置超时时间

可以在Feign Client的配置类中通过修改Request.Options对象来设置超时时间。Request.Options对象有两个属性,connectTimeoutMillis用于设置连接超时时间,readTimeoutMillis用于设置读取超时时间。

下面是一个示例:

@Configuration
public class FeignClientConfig {@Beanpublic Request.Options requestOptions() {return new Request.Options(5000, 5000);}}

在上面的示例中,连接超时和读取超时时间都设置为5000毫秒。

  1. 针对单个Feign接口方法设置超时时间

可以在Feign接口方法上使用@FeignClient注解的configuration属性来指定一个配置类,然后在配置类中通过修改Request.Options对象来设置超时时间。

下面是一个示例:

@FeignClient(name = "example-client", configuration = ExampleClientConfig.class)
public interface ExampleClient {@GetMapping("/example")@Headers("Content-Type: application/json")@RequestLine("GET /example")void getExample();}//@Configuration 不能全局配置
public class ExampleClientConfig {@Beanpublic Request.Options requestOptions() {return new Request.Options(5000, 5000);}}

在上面的示例中,ExampleClient接口中的getExample()方法的超时时间被配置为5000毫秒。

需要注意的是,Feign Client的超时时间设置只对请求的连接和读取阶段有效,对于响应的处理时间是无效的。如果需要设置整个请求-响应的超时时间,可以通过使用Hystrix或其他方式来实现。

不生效可能得原因

搜索一下项目里有没有对Options 进行重写,如下所示:

 @Beanpublic 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 类的默认构造函数里connectTimeout为10000ms,readTimeout为60000ms。你的配置文件里面的设置如果不生效可能就是被覆盖了。

feign:client:config:default:connectTimeout: 5000readTimeout: 150000

1.我们需要强制重写它才会生效

  @Primary@Beanpublic 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.单独针对某个方法设置超时时间。

@FeignClient(name = "example-client", configuration = ExampleClientConfig.class)
public interface ExampleClient {@GetMapping("/example")@Headers("Content-Type: application/json")@RequestLine("GET /example")void getExample();}@Configuration
public class ExampleClientConfig {@Beanpublic Request.Options requestOptions() {return new Request.Options(5000, 5000);}}
http://www.lryc.cn/news/382192.html

相关文章:

  • Haproxy部署Web群集
  • C++STL梳理
  • 找出1000以内的所有的完数
  • 3110. 字符串的分数
  • Mybatis MySQL allowMultiQueries 一次性执行多条语句
  • Kubernates容器化JVM调优笔记(内存篇)
  • Elasticsearch Scroll 报错entity content is too long
  • Vue iview输入框change事件replace正则替换不生效问题的解决。
  • Prestashop跨境电商独立站,外贸B2C网站完整教程
  • 常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法
  • java简易计算器(多种方法)
  • spring的bean定义和扫描规则
  • 软件工程体系概念
  • 史上最全整合nacos单机模式整合哈哈哈哈哈
  • Python xml.dom.minidom 读取XML元素
  • 【Python/Pytorch 】-- K-means聚类算法
  • 【Eureka】介绍与基本使用
  • SpringBoot+Vue集成富文本编辑器
  • React@16.x(34)动画(中)
  • ONLYOFFICE 8.1:全面升级,PDF编辑与本地化加强版
  • C++ 入门
  • GPT-5发布倒计时:AI智能从高中生到博士生的跨越
  • Docker 拉取镜像失败处理 配置使用代理拉取
  • 视频汇聚安防综合管理系统EasyCVR平台GB28181设备注册未上线的原因排查与解决
  • 【性能优化】Android冷启动优化
  • Git拉完整代码缺少某个类
  • Windows资源管理器down了,怎么解
  • 锐捷统一上网行为管理与审计系统 static_convert.php 前台RCE漏洞复现
  • 在Linux/Ubuntu/Debian中使用SSH连接远程服务器VPS
  • 如何安全进行亚马逊、沃尔玛测评?