2016-09-20 31 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