Read timed out executing GET (读取执行GET超时)

2022-08-07 14:38:50

背景

springcloud 项目中使用了 emq 队列服务。
在测试时发现一个问题,就是项目会报此错

feign.RetryableException: Read timed out executing GET http://upm-service/upm/api/device/statusUpload

如图

这是调用服务超时

实际就是熔断器经过发送http请求尝试连接但是未成功返回了错误信息,导致报错。理论上我们可以修改 hystrix 的状态为关闭,或者关闭异常捕捉错误返回,

  1. 不过通常我们只需要修改 ribbon 的请求处理与请求连接的时间,修改位置在配置文件 application.properties (我这里是网关的配置文件)如下:
    如图
    当然相对 hystrix 的连接时间也要修改,不然无意义,如下:
    如图

  2. 如果此情况下依然报错,我们则可以尝试关闭 fegin 的二层调用对象 hystrix 如下:
    如图

  3. 或者关闭异常提醒,不过并不推荐此方式(虽然基本不会对程序产生实际影响)如下:
    如图

  4. 也可以尝试开启 springcloud 的重试,如下:
    如图

这里说一下,当前项目的接口我是调用的其它项目的业务逻辑。
如下是当前项目的调用接口,访问路径就是其他项目业务路径,参数及格式都同理。这样我们想在此项目中使用其它项目业务逻辑时,只需要注入此接口对象并调用该方法即可。
如图
背景有好多需要说的,这里就简单说一下,直接说错误解决如下:

多数情况我们只需要更改配置即可

也有可能以上方法均尝试之后依然报错。

其次可能是被调用的服务出错才会调用超时

这时候我们只需要重启被调用的服务所在的项目即可。

还有一种情况就是请求方式,我出现的问题就在这里,被调用者要求是post请求,而我的测试emqtt发出的是get请求。

我们需要将注解 @GetMapping 改动为 @PostMapping 然后重启此项目即可。
如图

如果现在 依然报调用超时

那很可能是环境问题引起,比如物理内存不足(因为我的项目使用了队列,响应使用了Redis,可以尝试清理内存)等情况。
如图

其它情况随时补充,记录一下做个参考,方便以后使用。

  • 作者:庄生晓梦迷蝴蝶J
  • 原文链接:https://blog.csdn.net/weixin_42800689/article/details/84320959
    更新时间:2022-08-07 14:38:50