public class ExponentialBackOff extends Object implements BackOff
BackOff
that increases the back off period for each
retry attempt. When the interval has reached the max interval, it is no longer increased. Stops retrying once the
max elapsed time has been reached.
Example: The default interval is 2000L ms; the default multiplier is 1.5; and the default max interval is 30000L. For 10 attempts the sequence will be as follows:
request# back off 1 2000 2 3000 3 4500 4 6750 5 10125 6 15187 7 22780 8 30000 9 30000 10 30000
Note that the default max elapsed time is Long.MAX_VALUE
.
Use setMaxElapsedTime(long)
to limit the maximum length of time that an
instance should accumulate before returning BackOffExecution.STOP
.
Modifier and Type | Field and Description |
---|---|
static long |
DEFAULT_INITIAL_INTERVAL
The default initial interval.
|
static long |
DEFAULT_MAX_ELAPSED_TIME
The default maximum elapsed time.
|
static long |
DEFAULT_MAX_INTERVAL
The default maximum back off time.
|
static double |
DEFAULT_MULTIPLIER
The default multiplier (increases the interval by 50%).
|
Constructor and Description |
---|
ExponentialBackOff()
Create an instance with the default settings.
|
ExponentialBackOff(long initialInterval,
double multiplier)
Create an instance with the supplied settings.
|
Modifier and Type | Method and Description |
---|---|
long |
getInitialInterval()
Return the initial interval in milliseconds.
|
long |
getMaxElapsedTime()
Return the maximum elapsed time in milliseconds after which a call to
BackOffExecution.nextBackOff() returns BackOffExecution.STOP . |
long |
getMaxInterval()
Return the maximum back off time in milliseconds.
|
double |
getMultiplier()
Return the value to multiply the current interval by for each retry attempt.
|
void |
setInitialInterval(long initialInterval)
Set the initial interval in milliseconds.
|
void |
setMaxElapsedTime(long maxElapsedTime)
Set the maximum elapsed time in milliseconds after which a call to
BackOffExecution.nextBackOff() returns BackOffExecution.STOP . |
void |
setMaxInterval(long maxInterval)
Set the maximum back off time in milliseconds.
|
void |
setMultiplier(double multiplier)
Set the value to multiply the current interval by for each retry attempt.
|
BackOffExecution |
start()
Start a new back off execution.
|
public static final long DEFAULT_INITIAL_INTERVAL
public static final double DEFAULT_MULTIPLIER
public static final long DEFAULT_MAX_INTERVAL
public static final long DEFAULT_MAX_ELAPSED_TIME
public ExponentialBackOff()
public ExponentialBackOff(long initialInterval, double multiplier)
initialInterval
- the initial interval in millisecondsmultiplier
- the multiplier (should be greater than or equal to 1)public void setInitialInterval(long initialInterval)
public long getInitialInterval()
public void setMultiplier(double multiplier)
public double getMultiplier()
public void setMaxInterval(long maxInterval)
public long getMaxInterval()
public void setMaxElapsedTime(long maxElapsedTime)
BackOffExecution.nextBackOff()
returns BackOffExecution.STOP
.public long getMaxElapsedTime()
BackOffExecution.nextBackOff()
returns BackOffExecution.STOP
.public BackOffExecution start()
BackOff
start
in interface BackOff
BackOffExecution
ready to be used