微服务调用feign.RetryableException超时问题

笔者在开发代码过程中,涉及到两个微服务之间的调用,但是有如下报错:

feign.RetryableException:Read timed out executing POST http://********

1. 问题原因

这个是由于spring cloud feign超时配置导致的。
默认配置
在没有做特定配置的情况下,feign的默认超时时间是1秒

2. 解决方法

feign的超时配置有很多,有feign自身的,也有ribbon相关的。超时主要有两类配置:一个是连接超时,一个是读取超时。
Feign相关配置

feign.client.config.default.readTimeout=10000
feign.client.config.default.connectTimeout=7000

是Feign的全局超时配置。也可以为特定feign设置超时时间,只要把default换成(某个服务的名称,也为contextId)feign client的name就可以了。此处可以参考第3点。
这里有一个要注意的点就是如果只配置了连接超时或者读取超时其中一个是不会生效的,必须在配置文件中对这两类超时全部配置才会生效

Ribbon相关配置
ribbon中也有超时相关配置,分别是

ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=7000

Feign 和 Ribbon 的超时时间只会有一个生效,规则:如果没有设置过 feign 超时,也就是等于默认值的时候,就会读取 ribbon 的配置,使用 ribbon 的超时时间和重试设置。否则使用 feign 自身的设置。两者是二选一的,且 feign 优先。

3. 为特定feign设置超时时间

官方文档描述如下,对于2中的配置,只要把default换成即可,替换成什么呢?取决于@FeignClient中的value,其也有name或者contextId的别名。
在这里插入图片描述
对于如下代码,如果你把default替换为name的值test是不生效的,而替换为contextId的值testFeign则生效。

@FeignClient(name = "test", contextId = "testFeign")
public interface TestFeign {
 
    @GetMapping("/admin/v1/test/{test}")
    R<TestVo> getTestInfo(@PathVariable("id") Integer test);

参考内容:
https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#timeout-handling
https://blog.csdn.net/weixin_40404683/article/details/127729875

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值