2016-09-20 6 views
1

Ich habe einen Dienst, der 3 Pseud Clients verwendet. Jedes Mal, wenn ich meine Anwendung starte, erhalte ich beim ersten Aufruf eines Pseudonyms eine TimeoutException.Frühlingswolke | Feign Hytrix | First Call Timeout

Ich muss jeden Schein-Client mindestens einmal auslösen, bevor alles stabil ist. Wenn man sich online umsieht, ist das Problem, dass etwas in feign oder hystrix lazy geladen ist, und die Lösung bestand darin, eine Konfigurationsklasse zu erstellen, die die Frühjahrsvorgaben überschreibt. Ich habe das mit dem untenstehenden Code versucht und es hilft immer noch nicht. Ich sehe immer noch das gleiche Problem. Weiß jemand eine Lösung dafür? Ist die einzige Lösung, den feignclient zweimal über einen Hytrix Callback aufzurufen?

@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); 
    } 
} 

Frühling Cloud - Brixton.SR4 Frühling Boot - 1.4.0.RELEASE

Das alles in Lauf Docker Ubuntu - 12.04 Docker - 1.12.1 Docker-Compose - 1.8

+0

Ich würde gerne ein, um zu sehen Beispiel, wo der erste Anruf immer abläuft. – spencergibb

+0

hört sich gut an, ich werde jetzt einen Stacktrace hinzufügen – GSUgambit

+0

Ich habe einen Timeout-Stack-Trace gesehen, ich suche nach einem Beispielprojekt, das das Problem reproduziert. Tut mir leid, ich war nicht klarer. – spencergibb

Antwort

3

Ich fand die Lösung, dass die Standardeigenschaften von Hystrix nicht gut sind. Sie haben ein sehr kleines Zeitfenster und die Anfrage wird immer beim ersten Versuch ablaufen. Ich habe diese Eigenschaften zu meiner application.yml Datei in meine Config Service und jetzt alle meine Dienste können ohne Probleme verwenden vortäuschen und i dont

um das erste Mal Timeout zu codieren haben
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

Sie vermissen die Verwendung von Hystrix: Verhindern, dass sich Anfragen häufen (das gesamte System nicht verfügbar machen), wenn eines der nachfolgenden Systeme nicht vorhanden ist oder antwortet langsam. Wenn Sie das Zeitlimit auf 30 Sekunden erhöhen, riskieren Sie immer noch, das gesamte System zu sperren, anstatt yystix die Schaltung für die langsame Anwendung öffnen zu lassen (und sie wiederherstellen zu lassen) – dvtoever

+0

@dvtover das System kann immer noch die Schaltung offen haben und Sie können Fallbacks etc Mit diesen Konfigurationen müssen Sie nicht herumcodieren "ist dies der erste Anruf und deshalb ist die hystrix ausgefallen" – GSUgambit

+0

Wenn Sie "config service" sagen, beziehen Sie sich auf Ihre Konfig-Server-App in Ihrem Frühjahrs-Cloud-Projekt? Ich habe auch das gleiche Problem und ich habe ähnliche Konfiguration auf meinem Zuul Gateway-Projekt, aber nicht meine eigentlichen Service-Projekte. Muss ich diese Konfiguration in einzelnen Projekten eingeben, die Feign-Client verwendet? – Sayantan

Verwandte Themen