Java 如何实现具有指数回退的HttpRequestRetryHandler?
我希望在请求第一次失败的情况下为HttpClient实现一个 我还希望为以后的重试实现。从数学上讲,它可以实现为 但我现在很难在代码中实现它Java 如何实现具有指数回退的HttpRequestRetryHandler?,java,android,httprequest,Java,Android,Httprequest,我希望在请求第一次失败的情况下为HttpClient实现一个 我还希望为以后的重试实现。从数学上讲,它可以实现为 但我现在很难在代码中实现它 使用HttpRequestRetryHandler。HttpRequestRetryHandler不允许您进行那种级别的控制;如果您想做一些非常具体的事情,我建议您实现一些类似于的东西,您可以在其中使用Handler.postDelayed()来延迟执行可运行文件,并根据您的公式增加延迟 Handler mHandler = new Handler()
使用HttpRequestRetryHandler。HttpRequestRetryHandler不允许您进行那种级别的控制;如果您想做一些非常具体的事情,我建议您实现一些类似于的东西,您可以在其中使用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!
}
}
});
这是一个带有回退算法的好框架-我用于重试任意函数调用的策略 我将其与我编写的库集成,该库包含几个等待策略,允许轻松构建与随机间隔(又称抖动)相结合的可靠指数退避: 例如,对于构建一个上限为15秒、抖动为50%的指数回退:
Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
.retryIfResult(Predicates.isNull())
.withWaitStrategy(WaitStrategies.exponentialJitterWait(Duration.ofSeconds(15), 0.5D))
.build();
retryer.call(callable);
Retryer-Retryer=RetryerBuilder.newBuilder()
.RetryFresult(谓词.isNull())
.withWaitStrategy(WaitStrategys.exponentialJitterWait,持续时间为秒(15),0.5D))
.build();
retryer.call(可调用);
该库经过良好的测试和记录,可以通过Maven Central轻松集成
我希望这能有所帮助。嗨,Gaurav,你的最终解决方案是什么?它需要JDK 1.8