@FeignClient 在使用 eureka 服务 id 时总是超时
Posted
技术标签:
【中文标题】@FeignClient 在使用 eureka 服务 id 时总是超时【英文标题】:@FeignClient always timeout when using eureka service id 【发布时间】:2018-11-17 23:56:41 【问题描述】:我有一个使用 Declarative Feign Client 的 spring-boot 应用程序
@ComponentScan
@EnableFeignClients
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableZuulProxy
@FeignClient(name = "$service-registry-name", fallbackFactory = MyFallbackFactory.class, configuration = CommonFeignConfiguration.class)
public interface MyClient
@RequestMapping(method = RequestMethod.GET, path = "/test/reference/data")
HttpEntity<String> getAllData();
我有以下 application.yml
feign:
okhttp:
enabled: true
feign:
hystrix:
enabled: true
hystrix:
command:
MyClient#getAllData():
execution:
isolation:
thread:
timeoutInMilliseconds: 30000
hystrix:
command:
default:
execution:
timeout:
enabled: false
logging:
level:
project:
user:
MyClient: DEBUG
feign:
client:
config:
feign-name:
requestInterceptors: com.test.MyRequestHeaderProcessor
这个 spring-boot 应用程序运行良好,当我调试时,我可以看到 30000 的超时值已正确应用。
当我将此代码用作独立的 Spring Boot 应用程序,而是作为另一个项目的依赖 jar 时,问题就开始了。
此时,超时始终为 1000,这是默认值。我也设法覆盖了这一点。但尽管如此,我还是得到了 HystrixRunTimeException, Timeout with null。
我有 feign.hystrix.enabled=true。
如果我使用 feign.hystrix.enabled=false,我可以看到我的请求没有超时,但是后备机制无法工作。
但是,当我在 FeignClient 中添加 URL 属性时,它可以正常工作并且不会超时。我不能依赖 URL 属性,因为它来自可以更改的云代工服务 URL。
【问题讨论】:
我将 URL 属性添加到 @FeignClient,现在我没有收到超时问题。但这对我来说是一个糟糕的解决方法,因为 URL 是 CloudFoundy 服务 URL,它会发生变化。所以,现在我的问题陈述还包括,为什么 FeignClient 在我使用 service-id 名称(eureka 服务注册表)时超时但在我添加 URL 时没有超时?????? 【参考方案1】:在 Application.yml 文件中添加以下属性。
feign:
client:
config:
default:
connectTimeout: 80000000
readTimeout: 80000000
【讨论】:
以上是关于@FeignClient 在使用 eureka 服务 id 时总是超时的主要内容,如果未能解决你的问题,请参考以下文章
Springcloud踩坑记---使用feignclient远程调用服务404