2016-10-25 11 views
0

私はhystrix 1.3.7を使用しています。私のhystrixコマンドにはフォールバックメソッドも定義されています。次のようにだから、セットアップです:。しかし、私はタイムアウトがHystrixのために発生したときに、いくつかの回(すべてではない回が)、それはそれはgetFallbackメソッドのロジックを実行していないように思えるとHsytrixRuntimeExceptionを投げることHystrixRunTimeException:<operation>タイムアウトとフォールバックに失敗しました

public final Optional<ImageData> run() throws Exception { 
// does api call to get resized image from a service 
} 

@Override 
public final Optional<ImageData> getFallback() { 
    // falls back to processing the image locally. 
} 

実現していますスタックトレースがあります:

com.netflix.hystrix.exception.HystrixRuntimeException: imageResize timed-out and fallback failed. 
at com.netflix.hystrix.AbstractCommand.handleTimeoutViaFallback(AbstractCommand.java:980) 
at com.netflix.hystrix.AbstractCommand.access$500(AbstractCommand.java:59) 
at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:595) 
at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:587) 
at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:77) 
at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) 
at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) 
at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.run(AbstractCommand.java:1121) 
at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:41) 
at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:37) 
at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.run(HystrixContextRunnable.java:57) 
at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$2.tick(AbstractCommand.java:1138) 
at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

hystrixが正しく構成されていない可能性がありますか?どんな助けもありがとう。

+0

try/catchで 'getFallback'にコードを入れて、投げられた例外を記録してみてください。ログから、例外がスローされると言うでしょう – Ivan

答えて

0

エラーログから、run()メソッドが失敗し、フォールバックが呼び出されたことがわかりました。フォールバックの中にあるロジックも失敗するようです。フォールバックは決して失敗しないようにコード化する必要があります。失敗している場合は代替コードを確認してください。フォールバック内で障害を処理するか、フォールバックからどこかにロジックを移動するだけです。

関連する問題