春云| Feign Hytrix |首次通话超时

时间:2016-09-20 19:47:51

标签: spring-cloud hystrix spring-cloud-feign

我有一个使用3个假装客户的服务。每次我启动我的应用程序时,我会在第一次调用任何假装客户端时收到TimeoutException。

在一切稳定之前,我必须至少触发一次假装客户端。在线查看,问题是feign或hystrix内部的内容是延迟加载的,解决方案是创建一个覆盖spring默认值的配置类。我尝试过以下代码并且它仍然没有帮助。我仍然看到同样的问题。有人知道解决这个问题吗?是通过hystrix回调调用feignclient两次的唯一解决方案吗?

 @FeignClient(value = "SERVICE-NAME", configuration =ServiceFeignConfiguration.class)     

 @Configuration
 public class ServiceFeignConfiguration {

     @Value("${service.feign.connectTimeout:60000}")
     private int connectTimeout;

     @Value("${service.feign.readTimeOut:60000}")
     private int readTimeout;

     @Bean
     public Request.Options options() {
         return new Request.Options(connectTimeout, readTimeout);
     }
 }

Spring Cloud - Brixton.SR4 Spring Boot - 1.4.0.RELEASE

这都是在docker中运行的 Ubuntu - 12.04 Docker - 1.12.1 Docker-Compose - 1.8

1 个答案:

答案 0 :(得分:4)

我发现解决方案是Hystrix的默认属性不好。它们具有非常小的超时窗口,并且请求将在第一次尝试时总是超时。我在我的配置服务中将这些属性添加到我的application.yml文件中,现在我的所有服务都可以使用假装而没有任何问题,我没有第一次超时的代码

hystrix:
 threadpool.default.coreSize: "20"
 threadpool.default.maxQueueSize: "500000"
 threadpool.default.keepAliveTimeMinutes: "2"
 threadpool.default.queueSizeRejectionThreshold: "500000"
 command:
   default:
     fallback.isolation.semaphore.maxConcurrentRequests: "20"
     execution:
       timeout:
         enabled: "false"
       isolation:
         strategy: "THREAD"
         thread:
           timeoutInMilliseconds: "30000"