2016-07-21 3 views
0

Immer wenn unser Code eine Ausnahme auslöst, die com.netflix.hystrix.exception.HystrixRuntimeException: MyClass timed-out and fallback failed. lautet, müssen wir uns immer selbst überlegen, ob das Problem darin besteht, dass Hystrix korrekt konfiguriert ist. Eine einfache Möglichkeit, diese Frage zu beantworten, wäre, wenn das Protokoll sagt, wie lange es gedauert hat, bis der Hystrix-Thread ausgeführt wurde, bevor er fehlerhaft war. Wenn es also 1000ms heißt, wissen wir, dass Hystrix nicht richtig konfiguriert ist (weil das die Standardeinstellung ist) und wenn es 5000ms heißt, wissen wir, dass es so konfiguriert ist, wie wir es wollen.Wenn Hystrix ausläuft, wie drucken Sie die benötigte Zeit aus?

Antwort

1

Sie können etwas tun:

command.getExecutionTimeInMilliseconds() 

diese Methode erfahren Sie, wie viele Sekunden Ihre run-Methode, in einem Timeout zu erfassen nahm man dies in einem Try-Catch in Ihrem Befehlsklasse wickeln kann

@Override 
protected HttpResponse run() throws Exception { 
    try { 
     return executeSomeCall(); 
    } catch (Exception e) { 
     System.out.println(getExecutionTimeInMilliseconds()); 
     throw e; 
    } 
} 

oder außerhalb auf den Aufruf

try { 
     HttpResponse response = command.execute(); 
     return response; 
    } 
    catch (HystrixRuntimeException e) { 
     command.getExecutionTimeInMilliseconds() // do something with the info 
    } 

einen Punkt nur, wenn Sie u Die Threads-Strategie ist in Ordnung, aber wenn Sie Semaphor verwenden, wird die Zeitüberschreitung nur auftreten, nachdem Sie eine Antwort erhalten haben. sogar, dass Ihr Timeout 1000 ms beträgt und die Anforderung 5000 ms dauerte. hystryx wartet 5000 ms, um Ihnen einen Zeitüberschreitungsfehler zu geben, und die getExecutionTimeInMilliseconds wird Ihnen 1000 ms zurückgeben.

Verwandte Themen