2016-10-25 36 views
0

我使用的是hystrix 1.3.7,我的hystrix命令也有一個回退方法。因此,它的設置如下: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. 
} 

不過,我已經意識到有些時候(不是全部)的時候發生超時的豪豬,好像它不執行getFallback方法的邏輯,並拋出HsytrixRuntimeException。這裏是堆棧跟蹤:

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()方法失敗並且調用fallback。您在回退內部的邏輯似乎也失敗了。建議是,回退應該以這樣一種方式編碼,即永遠不會失敗。請檢查您的後備代碼是否失敗。要麼處理回退內部的故障,要麼簡單地將邏輯移出回退處。