春云 |假装Hytrix |首次通话超时

Posted

技术标签:

【中文标题】春云 |假装Hytrix |首次通话超时【英文标题】:Spring Cloud | Feign Hytrix | First Call Timeout 【发布时间】:2017-01-28 21:10:06 【问题描述】:

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

在一切稳定之前,我必须至少触发每个 feign 客户端一次。在网上环顾四周,问题是 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 码头工人 - 1.12.1 Docker-Compose - 1.8

【问题讨论】:

我很想看看第一次调用总是超时的示例。 听起来不错,我现在添加一个堆栈跟踪 我看到了一个超时堆栈跟踪,我正在寻找一个重现问题的示例项目。抱歉我没说清楚。 我已更新到 desc 以包含版本号。我想无法尝试使用 config/eureka/4 micros / 创建一个 githib,并尝试从 4 号开始调用其他 3 个。它应该会显示出来,因为这是我的基本设置。我们有大约 10 项服务在使用,但我认为这不是 eureka 注册很多客户的问题。我也在使用 docker,并且也会包含这些版本号。 见***.com/a/44932243/2935802 【参考方案1】:

我发现解决方法是Hystrix的默认属性不好。他们有一个非常小的超时窗口,并且请求总是在第一次尝试时超时。我将这些属性添加到我的配置服务中的 application.yml 文件中,现在我的所有服务都可以毫无问题地使用 feign,并且我不必在第一次超时时编写代码

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"

【讨论】:

您错过了使用 Hystrix 的要点:当后续系统之一不存在或响应太慢时,防止请求堆积(使整个系统不可用)。通过将超时时间增加到 30 秒,您仍然有锁定整个系统的风险,而不是让 hystrix 为慢速应用程序打开电路(并让它恢复) @dvtover 系统仍然可以打开电路,您可以使用回退等。使用这些配置,您只需编写代码“这是第一次调用,这就是 hystrix 失败的原因”跨度> 当您说“配置服务”时,您指的是您的 Spring Cloud 项目中的配置服务器应用程序吗?我也面临同样的问题,我的 Zuul 网关项目有类似的配置,但我的实际服务项目没有。我是否必须在使用 Feign 客户端的单个项目中输入这些配置? @Sayantan 对不起,我刚刚看到你的回复,是的,我的意思是配置服务器而不是配置服务

以上是关于春云 |假装Hytrix |首次通话超时的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFHTTPSessionOperation 时超时

Capybara:首次测试超时“未能到达服务器,检查DNS和/或服务器状态”,所有其他测试工作正常

Bigquery 流式处理 API 超时错误

OkHttp3 超时设置

dubox首次调用消费者执行两次问题

增加C#类库(DLL)调用wcf服务超时