Feign 超时时间明明设了 3 秒,为什么实际等了 10 秒才返回超时?
这个问题我相信不少人遇到过。配置文件里写得清清楚楚feign: client: config: default: connectTimeout: 3000 readTimeout: 3000下游服务一旦变慢或者挂掉按预期最多 3 秒就应该超时返回。但实际一看监控超时时间稳定在 10 秒左右。3 秒变 10 秒多出来的 7 秒是哪来的先搞清楚一件事你配的 Feign 超时可能根本没生效很多人不知道在Spring Cloud 2020.0之前的版本对应 Spring Boot 2.4 之前Feign 底层的 HTTP 调用不是自己发出去的而是委托给 Ribbon 的 LoadBalancerFeignClient 来执行的。你可以在项目里查一下mvn dependency:tree | grep ribbon如果看到spring-cloud-starter-netflix-ribbon那就对了Ribbon是实际干活的那个。而 Ribbon 有自己的超时配置默认值写在 DefaultClientConfigImpl 里public static final int DEFAULT_CONNECT_TIMEOUT 2000; public static final int DEFAULT_READ_TIMEOUT 5000;ReadTimeout 默认 5000 毫秒。你在 Feign 层配的 3000ms到 Ribbon 这层被它自己的默认值 5000ms 盖掉了。但 5 秒也不是 10 秒还差一半问题出在哪另一半时间Ribbon 的默认重试Ribbon 有两个和重试相关的参数// 同一台实例重试次数不含首次 ribbon.MaxAutoRetries 0 // 切换下一台实例的重试次数 ribbon.MaxAutoRetriesNextServer 1 MaxAutoRetriesNextServer 1 意味着第一台实例超时之后Ribbon 会自动切换到另一台实例再试一次。实际最大等待时间的计算公式总耗时 ReadTimeout × (MaxAutoRetries 1) × (MaxAutoRetriesNextServer 1)代入默认值5000 × (0 1) × (1 1) 5000 × 1 × 2 10000ms10 秒对上了。第一台实例等 5 秒超时切到第二台再等 5 秒超时一共 10 秒。整个过程中你配的那个 3 秒没有参与任何环节。为什么 Ribbon 能覆盖 Feign 的配置不是猜的看源码。FeignLoadBalancer 在执行请求时构造超时参数的逻辑Override public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride) throws IOException { Request.Options options; if (configOverride ! null) { RibbonProperties override RibbonProperties.from(configOverride); options new Request.Options( override.connectTimeout(this.connectTimeout), override.readTimeout(this.readTimeout) ); } else { options new Request.Options(this.connectTimeout, this.readTimeout); } // ... }this.connectTimeout和this.readTimeout来自 Ribbon 的 IClientConfig不是来自 Feign 的配置。Feign 层面设的超时值在这里被直接无视了。配置优先级实际上是这样的Ribbon 服务级别配置 Ribbon 全局配置 Ribbon 默认值 Feign 配置不生效怎么改知道原因了改法很直接。第一种配 Ribbon 的参数既然实际生效的是 Ribbon就直接配 Ribbonribbon: ConnectTimeout: 3000 ReadTimeout: 3000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 0MaxAutoRetriesNextServer建议改成 0。默认的重试行为对 GET 请求问题不大但如果是 POST 请求没有幂等保证的情况下重试一次可能直接造成业务重复——比如多扣一笔款、多发一条短信。需要对特定服务单独设置的话order-service: ribbon: ReadTimeout: 5000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 0第二种升级 Spring Cloud去掉 RibbonSpring Cloud 2020.0 开始Ribbon 被移除了替代方案是Spring Cloud LoadBalancer。升级之后 Feign 的超时配置才是真正生效的那一份feign: client: config: default: connectTimeout: 3000 readTimeout: 3000如果项目短期内升不上去就老实配 Ribbon不要在 Feign 层面配了之后以为万事大吉。第三种在上层用熔断器兜底如果你对底层超时配置的优先级已经搞不清了可以在 Feign 外面再套一层Sentinel或者Resilience4j做超时控制。不管底层实际等多久上层到了时间直接走fallback。多一层封装但确定性强。怎么验证配置到底生效没有写一个测试接口故意 sleep 超过超时时间GetMapping(/slow) public String slow() throws InterruptedException { Thread.sleep(15000); return done; }用 Feign 调这个接口看实际多久返回异常约 3 秒返回你的超时配置生效了约 5 秒返回Ribbon 默认超时在生效重试关了约 10 秒返回Ribbon 默认超时 默认重试你配的 Feign 超时完全没用不用猜跑一次就知道了。说在最后这个问题的根源就一句话在有 Ribbon 的 Spring Cloud 项目里Feign 的超时配置是不生效的实际控制超时的是 Ribbon。配超时的时候先搞清楚最终是谁在发 HTTP 请求然后去配那一层的参数。中间封装了几层就有几层你以为生效了其实没生效的可能。

相关新闻

Arena神秘模型“蒙娜丽莎”现身:OpenAI图像生成新方向?

Arena神秘模型“蒙娜丽莎”现身:OpenAI图像生成新方向?

最近,LMSYS Chatbot Arena 上出现了一个神秘的新模型,代号为「蒙娜丽莎」(Mona Lisa)。由于其表现异常稳定,且在多轮图像相关盲测中排名快速攀升,社区开始猜测这可能是 OpenAI 尚未公开的新图像模型。 如果…

2026/8/29 4:34:39 阅读更多 →
WorkBuddy从零到一:流程自动化与数据编排完整指南

WorkBuddy从零到一:流程自动化与数据编排完整指南

先说一个很常见的场景:每天早上到公司,先打开表格软件拉取昨天的销售数据,把空行删掉、重复项去掉,再按日期汇总金额,最后把结果粘贴到汇报表里,截图发给领导。这套操作听上去不复杂,但每天 20 …

2026/8/29 4:34:39 阅读更多 →
富国基金大数据面试题解析:数仓建模、实时计算与数据质量实战

富国基金大数据面试题解析:数仓建模、实时计算与数据质量实战

先声明一下,这篇不是官方题解,也不是什么标准答案大全。我是结合这两年富国基金大数据岗的公开面经、候选人的复盘反馈,再叠加我自己在金融数据领域多年的落地经验,把题目背后的考察逻辑、技术原理和实操细节重新梳理了一遍。整理…

2026/8/29 4:34:39 阅读更多 →

最新新闻

DeepMind招聘禁用自家AI:AI时代如何验证程序员真实能力?

DeepMind招聘禁用自家AI:AI时代如何验证程序员真实能力?

谷歌DeepMind招聘要求“避开自家AI”,这个新闻放在AI行业里,其实比大部分模型发布都值得琢磨。一家把Gemini、AlphaFold做出来的顶级AI实验室,在招人时明确要求候选人在面试环节尽量不用自家AI,释放的信号不是“AI无用”&#xff…

2026/8/29 5:24:51 阅读更多 →
手撕Transformer:PyTorch从零实现注意力与编解码器

手撕Transformer:PyTorch从零实现注意力与编解码器

手撕 Transformer,最值得先看的不是把整份代码背下来,而是搞清楚输入、注意力、编解码器这三条主线怎么串起来。这篇文章用 PyTorch 从零实现一遍:输入经过 embedding、位置编码变成向量,自注意力在向量之间交换信息,编…

2026/8/29 5:24:51 阅读更多 →
用 ArkTS 做好应用上架完整流程:从核心 API 到可验证交互

用 ArkTS 做好应用上架完整流程:从核心 API 到可验证交互

HarmonyOS 应用上架流程演示:把准备、签名、审核与发布做成清晰的进度页面 先看懂这个页面要解决什么问题 应用从开发完成到真正面向用户,需要经历一段容易被遗漏的流程。开发者要准备账号和资质,要确认隐私政策,要完成版本打包与…

2026/8/29 5:24:51 阅读更多 →
LSM303AGR电子罗盘开发:磁校准与倾斜补偿实战

LSM303AGR电子罗盘开发:磁校准与倾斜补偿实战

去年做一款智能指环的导航功能时,我接手了一个很头疼的需求:在只有一颗LGA封装的LSM303AGR、功耗预算不到1mA的前提下,把电子罗盘的方位精度做到正负3度以内。LSM303AGR是ST推出的低功耗6轴组合传感器,集成了3轴磁力计和3轴加速度…

2026/8/29 5:24:51 阅读更多 →
2026充电机器人品牌排名:自动充电机器人怎么选更适配场景

2026充电机器人品牌排名:自动充电机器人怎么选更适配场景

随着新能源汽车、无人配送车、Robotaxi、工程机械等领域的快速普及,传统人工插拔充电枪的模式,已经越来越难匹配高频运营、无人化作业、多车集中补能的需求。充电机器人作为自动补能体系的核心载体,正在从概念演示快速走向规模化落地。2026年…

2026/8/29 5:24:51 阅读更多 →
面试常考算法题解析:Python滑动窗口、动态规划与回溯实战

面试常考算法题解析:Python滑动窗口、动态规划与回溯实战

《面试常考算法题(二)》已经来了。上一期聊了几个基础方向,评论区不少人说“思路能懂,但一到面试现场就卡住”。我特别理解这种感觉,所以这一期我换了个讲法:不只给你题目和解法,更让你看到拿到一道题之后,…

2026/8/29 5:23:51 阅读更多 →

日新闻

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:00:24 阅读更多 →
【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:00:24 阅读更多 →
Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/29 0:00:24 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 11:23:26 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 23:05:07 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 19:47:53 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/28 17:43:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →