5

3 つの偽のクライアントを使用するサービスがあります。アプリケーションを起動するたびに、偽装クライアントへの最初の呼び出しで TimeoutException が発生します。

すべてが安定する前に、各偽装クライアントを少なくとも 1 回トリガーする必要があります。オンラインで見回すと、feign または hystrix 内の何かが遅延ロードされていることが問題であり、解決策は、Spring のデフォルトをオーバーライドする構成クラスを作成することでした。以下のコードで試してみましたが、まだ役に立ちません。私はまだ同じ問題を見ます。誰でもこれの修正を知っていますか?hystrix コールバックを介して feignclient を 2 回呼び出す唯一の解決策はありますか?

 @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

4

1 に答える 1

5

解決策は、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"
于 2016-11-15T21:18:11.277 に答える