【问题标题】:feign.RetryableException: Read timed out executing GETfeign.RetryableException:读取执行 GET 超时
【发布时间】:2019-03-10 21:09:04
【问题描述】:

我的项目中有以下架构

我的 UI 服务(端口 8080)对网关服务(端口 8085)进行 Feign 调用。
我从 UI 服务获取的调用是“http://localhost:8080/invoice-list?startDate=2018-08-05&endDate=2018-10-05
来自网关服务“http://localhost:8085/invoice-download-service/invoice-list?startDate=2018-08-05&endDate=2018-10-05”的类似调用

当我从 UI 服务发出这个 GET 调用时,我会在一分钟内得到以下错误

 is feign.RetryableException: Read timed out executing GET http://localhost:8085/invoice-download-service/invoice-list?startDate=2018-08-05&endDate=2018-10-05] with root cause

java.net.SocketTimeoutException: Read timed out

但是当我从网关服务器直接调用微服务时,我没有收到错误。

网关服务的Application.properties文件

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=160000000

ribbon.OkToRetryOnAllOperations=true
ribbon.ReadTimeout=5000000
ribbon.ConnectTimeout=5000000
ribbon.MaxAutoRetries=3
ribbon.MaxAutoRetriesNextServer=3


zuul.host.socket-timeout-millis= 5000000
zuul.host.connect-timeout-millis= 5000000

在这里我将 readtimeout 和 connecttimeout 属性设置为大约 8 到 10 分钟,因此我没有收到错误。

UI服务的Application.properties文件

spring.application.name=external-ui-service

server.port=8080

在 UI 服务中,我没有超时属性。我在这里尝试了上述属性,但没有工作。 显然这个 UI 服务没有使用ribbon、zuul 等。这只是对网关的Feign 调用。

那么我应该怎么做才能增加 UI 服务的超时时间呢?

【问题讨论】:

    标签: spring-boot microservices connection-timeout spring-cloud-feign


    【解决方案1】:

    在 UI Service 的 application.propeties 文件中添加了以下属性。

    feign.client.config.default.connectTimeout: 160000000
    feign.client.config.default.readTimeout: 160000000
    

    【讨论】:

    • 如果发生超时时想抛出自定义异常怎么办。 tgat 是怎么做的?
    • 通过 try/catch 包围您的 get/post/delete 调用,并将 SocketTimeoutException 包装在您选择的例外中。
    猜你喜欢
    • 2019-06-15
    • 2017-06-20
    • 2021-10-30
    • 2018-01-09
    • 2021-02-10
    • 2016-08-05
    • 2017-10-14
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多