2012-12-10 52 views

回答

3

HttpRequestRetryHandler不允許你控制這個級別;如果你想做一些非常具體的事情,我建議你實現一些類似於Handler的地方,在那裏你可以發佈Runnables,延遲執行,例如使用Handler.postDelayed(),並根據你的公式增加延遲。

Handler mHandler = new Handler(); 
int mDelay = INITIAL_DELAY; 

// try request 
mHandler.postDelayed(mDelay, new Runnable() { 
    public void run() { 
     // try your request here; if it fails, then repost: 
     if (failed) { 
      mDelay *= 2; // or as per your formula 
      mHandler.postDelayed(mDelay, this); 
     } 
     else { 
      // success! 
     } 
    } 
}); 
0

我用guava-retrying重試任意函數調用的策略。

我有一個圖書館Guavaberry,我寫了整合,幷包含幾個等待的策略,允許輕鬆構建一個堅實的指數退避結合隨機間隔(又名抖動):ExponentialJitterWaitStrategy

例如,對於構建指數退避封端爲15秒,並用50%的抖動上的可調用:

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder() 
     .retryIfResult(Predicates.isNull()) 
     .withWaitStrategy(WaitStrategies.exponentialJitterWait(Duration.ofSeconds(15), 0.5D)) 
     .build(); 
retryer.call(callable); 

該庫以及測試和記錄,並且可以通過Maven的中部很容易地集成。

我希望能有所幫助。

+0

它需要JDK 1.8 – machinarium