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

@FeignClient调用超时

关于@FeignClient的核心知识点总结如下,结合之前的问题场景(job模块调用wms模块,超时问题及配置):

1. @FeignClient超时时间默认值

  • 默认配置:Feign默认的连接超时时间为1000ms(1秒),读取超时时间为1000ms(1秒)。
  • 触发超时:当远程调用(如job调用wms的接口)的实际耗时超过上述默认值时,会抛出超时异常(如Read timed out)。

2. 超时时间的配置方式

(1)配置位置
  • 必须在发起调用的模块(如job模块) 的配置中设置,因为Feign的超时规则由调用方控制。
  • 配置需写在调用方(job)的Nacos配置文件中(如bejoy-job-test.yml),而非被调用方(wms)。
(2)配置格式(Nacos中)
  • 全局配置(对所有@FeignClient生效):
    feign:client:config:default:  # default表示全局connect-timeout: 5000   # 连接超时(毫秒)read-timeout: 10000     # 读取超时(毫秒)
    
  • 局部配置(仅对特定服务生效,推荐):
    feign:client:config:bejoy-wms:  # 需与@FeignClient(name = "bejoy-wms")的name一致connect-timeout: 5000read-timeout: 10000     # 针对wms服务的超时设置
    
(3)配置生效关键
  • 配置中的服务名(如bejoy-wms)必须与@FeignClient注解的name属性完全一致,否则配置不生效,仍使用默认1000ms。
  • 优先级:局部配置(特定服务)> 全局配置(default)> Feign默认配置。

3. 超时问题的排查与解决

  • 现象:配置了超时时间(如5000ms),但仍在更短时间(如1300ms)超时。
  • 常见原因:配置的服务名与@FeignClient(name)不匹配,导致配置未生效,仍用默认1000ms。
  • 解决步骤
    1. 检查@FeignClientname属性(如bejoy-wms)。
    2. 在调用方(job)的Nacos配置中,确保feign.client.config下的服务名与上述name一致。
    3. 调整超时时间至合理值(如根据实际耗时2-4秒,设置为10000ms)。

4. 结合业务优化超时问题

  • 临时方案:通过配置延长超时时间,避免调用中断。
  • 根本方案
    • 优化被调用接口(wms的接口)性能(如SQL优化、减少冗余逻辑),降低响应耗时。
    • 调用方(job)通过异步并行(如CompletableFuture或线程池)处理多个任务,减少总耗时,间接降低超时概率。

总结:@FeignClient的超时配置是调用方的“行为规则”,需在调用模块(如job)中针对被调用服务(如wms)精准配置,且服务名必须匹配,才能有效解决超时问题。

特别注意:在nacos中加的超时服务的名称是@FeignClient注解中这个服务的名称,而不是当前服务的名称

结合调用方与被调用方的关系,补充说明@FeignClient配置的核心逻辑,尤其是“在调用方Nacos中配置被调用方信息”的原因:

核心逻辑:@FeignClient是调用方的“远程代理”

@FeignClient注解本质是在调用方(如job模块) 中定义一个“远程服务代理接口”,用于对接被调用方(如wms模块)的接口。因此:

  • 这个代理接口的行为(包括超时时间、重试策略等)完全由调用方控制,与被调用方无关。
  • 配置这些行为的参数,自然要写在调用方的配置文件中(如job模块的Nacos配置)。

关键:调用方Nacos中必须指定“被调用方的服务名”

在调用方(job)的Nacos配置里,feign.client.config下的服务名必须与@FeignClient注解的name属性完全一致(即被调用方的服务名,如bejoy-wms),这是配置生效的核心。

示例拆解:
  1. 调用方(job模块)的Feign接口定义

    // 声明要调用的是"bejoy-wms"服务(被调用方的服务名)
    @FeignClient(name = "bejoy-wms") 
    public interface BjTaskWms {// 调用wms模块的接口@PostMapping("/taskapi")String taskapi(@RequestParam("funName") String funName);
    }
    

    这里的name = "bejoy-wms"是“被调用方的服务名”,Feign会根据这个名字找到对应的服务并发起调用。

  2. 调用方(job模块)的Nacos配置

    # job模块的Nacos配置文件(如 bejoy-job-test.yml)
    feign:client:config:bejoy-wms:  # 必须与@FeignClient的name一致(被调用方服务名)connect-timeout: 5000   # 调用bejoy-wms时的连接超时read-timeout: 10000     # 调用bejoy-wms时的读取超时
    

    这段配置的含义是:“当本模块(job)通过Feign调用bejoy-wms服务时,使用上述超时时间”。

为什么不能写在被调用方(wms)的配置中?

  • 被调用方(wms)只负责提供接口,不关心“谁来调用”以及“调用方的超时规则”。
  • 超时是调用方的“等待耐心”,应由调用方根据自身需求设定(比如A模块调用wms可能需要5秒超时,B模块调用wms可能需要10秒,各自配置即可)。

总结

@FeignClient的配置是调用方为自己定义的“调用规则”,必须满足:

  1. 配置文件位置:在调用方(如job) 的Nacos中。
  2. 配置服务名:feign.client.config下的服务名必须与@FeignClient(name)一致(即被调用方的服务名,如bejoy-wms)。

只有这样,调用方的Feign客户端才能正确识别“调用哪个服务时用这些规则”,避免因配置不匹配导致的超时问题。

http://www.dtcms.com/a/550025.html

相关文章:

  • Ubuntu(②共享剪贴板)
  • 桂林北站有核酸检测点吗app开发的公司
  • apache启动失败Failed to start The Apache HTTP Server.
  • 汕头建设南京网站seo服务
  • 饰品网站模板建立网站的作用
  • 解析视频融合平台EasyCVR的分析平台技术如何成为“全域视频管理中台”
  • ubuntu启动项问题
  • 网站开发工资咋样品牌建设的作用和意义
  • 展馆门户网站建设深圳网站外包公司
  • MATLAB高效算法实战
  • 网站导航图怎么做的详细步骤郑州发布直播
  • 做网站灰色网站怎么判刑北邻京网站茵建设
  • MySQL 读写分离:用 ProxySQL 实现 “读走从库,写走主库”(附延迟问题解决方案)
  • C Primer Plus Notes 10
  • wap网站制作动态如何做色流量网站
  • 【BTC】分叉
  • 高端建站咨询wordpress 音乐播放器 歌词
  • 网站开发北京外贸公司大全
  • 最便宜网站空间做h5好点的网站
  • 网站的建设与板块如何保存wordpress主题设置
  • 基于hadoop的电商用户行为分析系统(源码+论文+部署+安装)
  • 通达oa 做网站可以做动图的视频网站
  • 做黄金比较专业的网站网站自助制作
  • 长沙建站工作室乐陵森林覆盖率
  • 移动电子商务网站建设深圳公司建立网站
  • 1.0 机器学习实际上是什么
  • 352-Spring AI Alibaba OpenAI DashScope 多模态示例
  • 网站的备案用wordpress建站域名和空间哪里买比较好
  • vue3 中组件的生命周期详解
  • 单片机实现队列功能