SpringCloud微服务服务间调用之OpenFeign介绍(三) timeout问题

前提:
阅读本文前请先参考《SpringCloud微服务服务间调用之OpenFeign介绍(一) 》

问题由来

使用Feign可以完成服务间调用,但是总存在一种情况:服务提供方特别慢,但是服务提供方是运行正常,如果我们自定义设置timeout,就出现feign.RetryableException: Read timed out executing GET http://user-service/v1/usersWithSleep/2?sleepTimeMillis=6000 异常, 导致无法继续工作

那么如何设置timeout?

解决办法

官方文档:
1, https://github.com/Netflix/ribbon
2,https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.0.2.RELEASE/single/spring-cloud-netflix.html#spring-cloud-ribbon
3,https://github.com/Netflix/ribbon/wiki/Programmers-Guide

完完整代码这这里, user-servciefeignusercommodity-service, 欢迎加星,fork。
主要使用consul 1.2.0, Spring Boot 2.0.1, Spring Cloud Finchley.RELEASE。

从文档2可以看到 “ Feign already uses Ribbon, so, if you use @FeignClient, this section also applies.”

配置文件application.properties中设置ribbon的timeout

ribbon.ConnectTimeout=30000
ribbon.ReadTimeout=7000

代码简要说明,user-servcie有个接口A可以根据userId查询用户,但是sleep之后才返回,sleep由调用方提供(我的示例代码只是为了演示timeout效果,实际中有的接口可能需要查询数据库并对查询结果进行各种转换导致接口比较慢)

feignusercommodity-service服务会调用user-servcie的接口A,当你传入的sleep较小时,可以正常返回,但是当sleep较大时,因为ribbon.ReadTimeout限制就会出现feign.RetryableException: Read timed out executing GET http://user-service/v1/usersWithSleep/2?sleepTimeMillis={yourSleepTime}

效果截图

第一张截图
user-server服务工作正常,http://localhost:7001/v1/usersWithSleep/2?sleepTimeMillis=6000一直都能返回数据,就是等待时间较长,
当我们没有设置ribbon.ReadTimeout=7000时,调用feignusercommodity-service的http://localhost:7010/my/usersWithSleep/2?sleepTimeMillis=6000出现异常,如下图

在这里插入图片描述

第二张截图
当我们在feignusercommodity-service的配置文件中设置ribbon.ReadTimeout=7000后,调用feignusercommodity-service的http://localhost:7010/my/usersWithSleep/2?sleepTimeMillis=6000正常,如下图

在这里插入图片描述

第三张截图
当我们在feignusercommodity-service的配置文件中设置ribbon.ReadTimeout=7000后,调用feignusercommodity-service的http://localhost:7010/my/usersWithSleep/2?sleepTimeMillis=7001出现异常,如下图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值