如何设置自定义 Feign 客户端连接超时?

Posted

技术标签:

【中文标题】如何设置自定义 Feign 客户端连接超时?【英文标题】:How to set custom Feign client connection timeout? 【发布时间】:2017-05-19 03:04:05 【问题描述】:

我有这个 Gradle 依赖项的 Spring Boot 应用程序:

compile("org.springframework.cloud:spring-cloud-starter-eureka")
compile("org.springframework.cloud:spring-cloud-starter-feign")
compile("org.springframework.cloud:spring-cloud-starter-ribbon")
compile("org.springframework.cloud:spring-cloud-starter-hystrix")
compile("org.springframework.cloud:spring-cloud-starter-config")

我还有 Feign 客户端:

@FeignClient(name = "client")
public interface FeignService 

    @RequestMapping(value = "/path", method = GET)
    String response();


我的application.properties

client.ribbon.listOfServers = http://localhost:8081
ribbon.eureka.enabled=false

当查询时间超过 1 秒时出现异常:

com.netflix.hystrix.exception.HystrixRuntimeException: response timed-out and no fallback available.

所以我的问题是:例如 2 秒。

【问题讨论】:

【参考方案1】:

您可以使用 application.yaml 文件中的配置属性来配置超时:

feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000

请注意,这将更改您的默认 feign 配置,如果您只想为您的客户端更新超时,请将 default 替换为 @FeignClient 中配置的名称,在您的情况下它将是 client,另一件事是您必须同时指定 connectTimeoutreadTimeout 才能生效。

更多详情请看:documentation

【讨论】:

【参考方案2】:

我使用answer 解决了我的问题:Hystrix command fails with “timed-out and no fallback available”

我将hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=4000 添加到我的application.properties 以设置自定义超时。

【讨论】:

很高兴为您提供帮助! @Roman 你也可以使用操作名对每个方法做细粒度的超时控制:hystrix.command."FeignService#sayHello(String)".execution.isolation.thread.timeoutInMilliseconds: 20000 如何更改 maven 项目的超时时间?? 你有任何关于如何添加超时并解决此问题的 github 链接吗?

以上是关于如何设置自定义 Feign 客户端连接超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Cloud Netflix Feign 设置自定义 Jackson ObjectMapper

使用 Netflix Feign 和 Hystrix 设置请求超时

Spring Cloud核心组件:Ribbon,Feign

SpringCloudAlibaba微服务组件Feign

SpringCloudAlibaba微服务组件Feign

Spring Cloud Alibaba - 14 OpenFeign自定义配置 + 调用优化 + 超时时间