feign 第一次调用超时_SpringBoot 关于Feign的超时时间配置

走过路过不要错过

点击蓝字关注我们

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

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

一个实际的代码示例:

@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-timeout2、这两个参数的默认值分别为 10秒 和 60秒3、如果要对这两个参数进行配置,那么对应的配置方法如下

feign.client.config.default.connect-timeout=5000feign.client.config.default.read-timeout=30000

(单位毫秒)

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

feign.client.config.shanhy-id.connect-timeout=2000feign.client.config.shanhy-id.read-timeout=5000

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

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

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

然后对应的配置为:

feign.client.config.shanhy-id-2.connect-timeout=3000feign.client.config.shanhy-id-2.read-timeout=15000

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

至此,问题解决。


f10be68684d16ca36126c597ab8cf3ac.png往期精彩推荐

腾讯、阿里、滴滴后台面试题汇总总结 — (含答案)

面试:史上最全多线程面试题 !

最新阿里内推Java后端面试题

JVM难学?那是因为你没认真看完这篇文章

2e52d2e848a41dab85e5c87265fc9001.png— END—

关注作者微信公众号 —《JAVA烂猪皮》

了解更多java后端架构知识以及最新面试宝典

17f5e638882dde60520f052fb1917291.png

d0de9223c2178bf32595e790b1ea319d.png你点的每个好看,我都认真当成了 66e711875661be1724af6f43f60c8b46.png

看完本文记得给作者点赞+在看哦~~~大家的支持,是作者源源不断出文的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值