前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 关于Feign的超时时间配置

SpringBoot 关于Feign的超时时间配置

作者头像
烂猪皮
发布2020-11-02 14:24:29
10.2K0
发布2020-11-02 14:24:29
举报
文章被收录于专栏:JAVA烂猪皮

走过路过不要错过

点击蓝字关注我们

今天项目现场提过来一个问题 “公司发过来的封装好的 springboot 项目中的 feign 调用超时时间需要修改”,细问之后,具体的需求场景是这样的: 1、首先要对 feign 的超时时间做设置 2、然后具体的要求是,只要对某一个微服务的其中一个接口进行特殊配置,对其余的所有接口做一个统一配置

公司 feign 版本 spring-cloud-starter-openfeign 2.2.3.RELEASE ,其他版本自行尝试 基于 @FeignClient 的声明式接口调用

一个实际的代码示例:

代码语言:javascript
复制
@FeignClient(name = "${microservice.servicename.id:shanhy-id}", path = "/${microservice.servicename.id:shanhy-id}",
url = "${microservice.serviceurl.id:}")
public interface IdFeignClient {
   (代码略)
}

顺着这个问题,我思考了一下,扒了下 feign 调用的相关源码,下面直接给出结论(因为比较忙时间有限这里就不做源码分析了): 1、feign 调用与超时有关的参数分为 连接超时时间 connect-timeout 和 读取超时时间read-timeout 2、这两个参数的默认值分别为 10秒 和 60秒 3、如果要对这两个参数进行配置,那么对应的配置方法如下

代码语言:javascript
复制
feign.client.config.default.connect-timeout=5000
feign.client.config.default.read-timeout=30000

(单位毫秒)

4、当前代码工程中有好几个 @FeignClient 声明,分别调用了不同的其他服务,如果要单独为这个 shanhy-id 服务设置这两个超时时间,那么对应的配置方法如下:

代码语言:javascript
复制
feign.client.config.shanhy-id.connect-timeout=2000
feign.client.config.shanhy-id.read-timeout=5000

注意和默认的区别就是中间那一段,将 default 替换为 shanhy-id,这个和 @FeignClient 中的 name 属性一致

5、如果需要针对某一个服务中的某一个或几个接口做特殊配置,那么就为这个特殊接口单独写一个 @FeignClient 接口定义,并为设置一个 contextId 设置一个和 name 不重名的名字,保证唯一,下面是例子:

代码语言:javascript
复制
@FeignClient(name = "${microservice.servicename.id:shanhy-id}", path = "/${microservice.servicename.id:shanhy-id}",
url = "${microservice.serviceurl.id:}", contextId = "shanhy-id-2" )
public interface IdFeignClient {
   (代码略)
}

然后对应的配置为:

代码语言:javascript
复制
feign.client.config.shanhy-id-2.connect-timeout=3000
feign.client.config.shanhy-id-2.read-timeout=15000

其实系统启动的时候,会为每一个 @FeignClient 定义的接口形成代理类然后进行配置,contextId 是当前 FeignClient 相关参数在 FeignContext 上下文中的 key,通过 contextId 来区分不同 FeignClient 的配置,如果 contextId 没有配置则使用 name 作为上限文中的 key,与超时时间之外的其他相关配置详见 FeignClientConfiguration

至此,问题解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA烂猪皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档