feign调用接口返回html,SpringCloud微服务服务间调用之OpenFeign介绍(三) timeout问题

问题由来

使用Feign能够完成服务间调用,可是总存在一种状况:服务提供方特别慢,可是服务提供方是运行正常,若是咱们自定义设置timeout,就出现feign.RetryableException: Read timed out executing GET http://user-service/v1/usersWithSleep/2?sleepTimeMillis=6000 异常, 致使没法继续工做git

那么如何设置timeout?github

解决办法

完完整代码这这里, user-servcie, feignusercommodity-service, 欢迎加星,fork。

主要使用consul 1.2.0, Spring Boot 2.0.1, Spring Cloud Finchley.RELEASE。spring

从文档2能够看到 “ Feign already uses Ribbon, so, if you use @FeignClient, this section also applies.”数据库

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

ribbon.ConnectTimeout=30000

ribbon.ReadTimeout=7000

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

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

效果截图

第一张截图

user-server服务工做正常,http://localhost:7001/v1/usersWithSleep/2?sleepTimeMillis=6000一直都能返回数据,就是等待时间较长,

当咱们没有设置ribbon.ReadTimeout=7000时,调用feignusercommodity-service的http://localhost:7010/my/usersWithSleep/2?sleepTimeMillis=6000出现异常,以下图微服务

9f9b37abaf0a722e5cd93bd29b9f83da.png

第二张截图

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

015501d4aee638049113a45c9b22962a.png

第三张截图

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

b0fce35622dead0584d079bb7921d21f.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值