2016-09-20 102 views
1

我有一个使用3假装客户端的服务。每次我开始我的应用程序时,第一次调用任何假客户端时都会遇到TimeoutException。Spring Cloud | Feign Hytrix |第一次呼叫超时

我必须在每件事都稳定之前触发每个假客户端至少一次。在网上查看,问题在于假装或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); 
    } 
} 

春云 - Brixton.SR4 春季启动 - 12.04 泊坞窗 - - 1.4.0.RELEASE

这是所有在泊坞窗 运行的Ubuntu 1.12.1 泊坞窗 - 撰写 - 1.8

+0

我很想看到一个第一次通话总是超时的样本。 – spencergibb

+0

听起来不错,我现在将添加一个堆栈跟踪 – GSUgambit

+0

我见过一个超时堆栈跟踪,我正在寻找一个重现问题的示例项目。对不起,我不清楚。 – spencergibb

回答

3

我发现解决方案是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" 
+0

您错过了使用Hystrix的要点:当其中一个后续系统不存在或者响应时,阻止请求堆积(使整个系统不可用)慢。通过将超时时间增加到30秒,您仍然有可能锁定整个系统,而不是让hystrix将电路开放给缓慢的应用程序(并让其恢复) – dvtoever

+0

@dvtover系统仍然可以打开电路,并且可以使用后备等。这些配置你只是不必编码“这是第一次调用,这就是为什么hystrix失败” – GSUgambit

+0

当你说“配置服务”你指的是你的配置服务器应用程序在你的春天云计划?我也面临同样的问题,我在Zuul网关项目上有类似的配置,但不是我的实际服务项目。我是否必须在使用Feign客户端的单个项目中输入这些配置? – Sayantan