public abstract class AbstractRetryScheduler extends Object implements RetryScheduler
RetryScheduler
s. This class provides methods to do the actual rescheduling and
decides if a given Throwable
is explicitly transient.Modifier and Type | Class and Description |
---|---|
static class |
AbstractRetryScheduler.Builder<B extends AbstractRetryScheduler.Builder>
A builder class for the
RetryScheduler implementations. |
Modifier | Constructor and Description |
---|---|
protected |
AbstractRetryScheduler(AbstractRetryScheduler.Builder builder)
Construct the
AbstractRetryScheduler from its builder. |
Modifier and Type | Method and Description |
---|---|
protected abstract long |
computeRetryInterval(CommandMessage commandMessage,
RuntimeException lastFailure,
List<Class<? extends Throwable>[]> failures)
Compute the amount of milliseconds delay until the next retry, given the information passed.
|
protected boolean |
isExplicitlyNonTransient(Throwable failure)
Indicates whether the given
failure is clearly non-transient. |
boolean |
scheduleRetry(CommandMessage commandMessage,
RuntimeException lastFailure,
List<Class<? extends Throwable>[]> failures,
Runnable dispatchTask)
This is the entrypoint of the
RetryScheduler . |
protected boolean |
scheduleRetry(Runnable commandDispatch,
long interval)
Schedule the provided task to run after the given interval.
|
protected AbstractRetryScheduler(AbstractRetryScheduler.Builder builder)
AbstractRetryScheduler
from its builder.builder
- the AbstractRetryScheduler.Builder
protected boolean scheduleRetry(Runnable commandDispatch, long interval)
commandDispatch
- the Runnable
to schedule.interval
- the number of milliseconds delay.true
if the task was accepted for scheduling, false
otherwise.protected abstract long computeRetryInterval(CommandMessage commandMessage, RuntimeException lastFailure, List<Class<? extends Throwable>[]> failures)
commandMessage
- the command that was sent (and failed).lastFailure
- the last failure that caused this retry scheduler to be called.failures
- a List
of all failures up to now.protected boolean isExplicitlyNonTransient(Throwable failure)
failure
is clearly non-transient. That means, whether the
failure
explicitly states that a retry of the same Command would result in the same failure to
occur again.
In this implementation, given failure
(and its causes) is tested against configured composable
nonTransientFailurePredicate
. By default, nonTransientFailurePredicate
is configured only
with AxonNonTransientExceptionClassesPredicate
.failure
- the exception that occurred while processing a commandtrue
if the exception is clearly non-transient and the command should not be
retried, or false
when the command has a chance of succeeding if it retried.public boolean scheduleRetry(@Nonnull CommandMessage commandMessage, @Nonnull RuntimeException lastFailure, @Nonnull List<Class<? extends Throwable>[]> failures, @Nonnull Runnable dispatchTask)
RetryScheduler
. This default implementation checks if the last failure was
transient, and if so reschedules a command dispatch.scheduleRetry
in interface RetryScheduler
commandMessage
- The Command Message being dispatchedlastFailure
- The last failure recorded for this commandfailures
- A condensed view of all known failures of this command. Each element in the array
represents the cause of the element preceding it.dispatchTask
- the task that performs the actual dispatching.true
if rescheduling succeeded, false
if otherwise.Copyright © 2010–2023. All rights reserved.