package com.baidu.disconf.core.common.restful.retry.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baidu.disconf.core.common.restful.core.UnreliableInterface;
import com.baidu.disconf.core.common.restful.retry.RetryStrategy;
/**
* 轮循重试
*
* @author liaoqiqi
* @version 2014-8-4
*/
public class RetryStrategyRoundBin implements RetryStrategy {
protected static final Logger LOGGER = LoggerFactory.getLogger(RetryStrategyRoundBin.class);
/**
* @param unreliableImpl
* @param retryTimes
* @param sleepSeconds
*/
public <T> T retry(UnreliableInterface unreliableImpl, int retryTimes, int sleepSeconds) throws Exception {
int cur_time = 0;
for (; cur_time < retryTimes; ++cur_time) {
try {
return unreliableImpl.call();
} catch (Exception e) {
LOGGER.warn("cannot reach, will retry " + cur_time + " .... " + e.toString());
try {
Thread.sleep(sleepSeconds * 1000);
} catch (InterruptedException e1) {
}
}
}
LOGGER.warn("finally failed....");
throw new Exception();
}
}