Class RedeliveryErrorHandler
- java.lang.Object
-
- org.apache.camel.support.service.BaseService
-
- org.apache.camel.support.service.ServiceSupport
-
- org.apache.camel.support.ChildServiceSupport
-
- org.apache.camel.processor.errorhandler.ErrorHandlerSupport
-
- org.apache.camel.processor.errorhandler.RedeliveryErrorHandler
-
- All Implemented Interfaces:
AutoCloseable
,org.apache.camel.AsyncProcessor
,org.apache.camel.Navigate<org.apache.camel.Processor>
,org.apache.camel.Processor
,org.apache.camel.Service
,org.apache.camel.ShutdownableService
,org.apache.camel.spi.ErrorHandler
,org.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
,org.apache.camel.spi.ShutdownPrepared
,org.apache.camel.StatefulService
,org.apache.camel.SuspendableService
- Direct Known Subclasses:
DeadLetterChannel
,DefaultErrorHandler
public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport implements org.apache.camel.spi.ErrorHandlerRedeliveryCustomizer, org.apache.camel.AsyncProcessor, org.apache.camel.spi.ShutdownPrepared, org.apache.camel.Navigate<org.apache.camel.Processor>
Base redeliverable error handler that also supports a final dead letter queue in case all redelivery attempts fail. This implementation should contain all the error handling logic and the sub classes should only configure it according to what they support.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
RedeliveryErrorHandler.RedeliveryTask
Task to perform calling the processor and handling redelivery if it fails (more advanced than ProcessTask)protected class
RedeliveryErrorHandler.SimpleTask
Simple task to perform calling the processor with no redelivery support
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.camel.spi.AsyncProcessorAwaitManager
awaitManager
protected org.apache.camel.ExtendedCamelContext
camelContext
protected boolean
customExchangeFormatter
protected org.apache.camel.Processor
deadLetter
protected boolean
deadLetterHandleNewException
protected String
deadLetterUri
protected org.apache.camel.spi.ExchangeFormatter
exchangeFormatter
protected ScheduledExecutorService
executorService
protected org.apache.camel.spi.CamelLogger
logger
protected org.apache.camel.Processor
onExceptionProcessor
protected org.apache.camel.Processor
onPrepareProcessor
protected org.apache.camel.Processor
output
protected org.apache.camel.AsyncProcessor
outputAsync
protected boolean
preparingShutdown
protected org.apache.camel.spi.ReactiveExecutor
reactiveExecutor
protected boolean
redeliveryEnabled
protected RedeliveryPolicy
redeliveryPolicy
protected org.apache.camel.Processor
redeliveryProcessor
protected AtomicInteger
redeliverySleepCounter
protected org.apache.camel.Predicate
retryWhilePolicy
protected org.apache.camel.spi.ShutdownStrategy
shutdownStrategy
protected boolean
simpleTask
protected PooledExchangeTaskFactory
taskFactory
protected boolean
useOriginalBodyPolicy
protected boolean
useOriginalMessagePolicy
-
Fields inherited from class org.apache.camel.processor.errorhandler.ErrorHandlerSupport
DEFAULT_EXCHANGE_FORMATTER, exceptionPolicies, exceptionPolicy
-
-
Constructor Summary
Constructors Constructor Description RedeliveryErrorHandler(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor output, org.apache.camel.spi.CamelLogger logger, org.apache.camel.Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy, org.apache.camel.Processor deadLetter, String deadLetterUri, boolean deadLetterHandleNewException, boolean useOriginalMessagePolicy, boolean useOriginalBodyPolicy, org.apache.camel.Predicate retryWhile, ScheduledExecutorService executorService, org.apache.camel.Processor onPrepareProcessor, org.apache.camel.Processor onExceptionProcessor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
changeOutput(org.apache.camel.Processor output)
protected org.apache.camel.Exchange
defensiveCopyExchangeIfNeeded(org.apache.camel.Exchange exchange)
Performs a defensive copy of the exchange if neededboolean
determineIfRedeliveryIsEnabled()
protected long
determineRedeliveryDelay(org.apache.camel.Exchange exchange, RedeliveryPolicy redeliveryPolicy, long redeliveryDelay, int redeliveryCounter)
Determines the redelivery delay time by first inspecting the Message headerExchange.REDELIVERY_DELAY
and if not present, defaulting toRedeliveryPolicy.calculateRedeliveryDelay(long, int)
protected void
doShutdown()
protected void
doStart()
protected void
doStop()
org.apache.camel.Processor
getDeadLetter()
Returns the dead letter that message exchanges will be sent to if the redelivery attempts failString
getDeadLetterUri()
protected org.apache.camel.Predicate
getDefaultHandledPredicate()
org.apache.camel.spi.CamelLogger
getLogger()
org.apache.camel.Processor
getOutput()
Gets the outputRedeliveryPolicy
getRedeliveryPolicy()
boolean
hasNext()
boolean
isDeadLetterHandleNewException()
protected boolean
isDone(org.apache.camel.Exchange exchange)
Strategy to determine if the exchange is done so we can continueprotected boolean
isRunAllowedOnPreparingShutdown()
boolean
isUseOriginalBodyPolicy()
boolean
isUseOriginalMessagePolicy()
List<org.apache.camel.Processor>
next()
void
prepareShutdown(boolean suspendOnly, boolean forced)
void
process(org.apache.camel.Exchange exchange)
boolean
process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback)
Process the exchange using redelivery error handling.CompletableFuture<org.apache.camel.Exchange>
processAsync(org.apache.camel.Exchange exchange)
boolean
supportTransacted()
Whether this error handler supports transacted exchanges or not.-
Methods inherited from class org.apache.camel.processor.errorhandler.ErrorHandlerSupport
addErrorHandler, addExceptionPolicy, clone, getExceptionPolicy, isDeadLetterChannel
-
Methods inherited from class org.apache.camel.support.ChildServiceSupport
addChildService, removeChildService, shutdown, start, stop
-
Methods inherited from class org.apache.camel.support.service.BaseService
build, doBuild, doFail, doInit, doLifecycleChange, doResume, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, suspend
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
Field Detail
-
taskFactory
protected PooledExchangeTaskFactory taskFactory
-
redeliverySleepCounter
protected final AtomicInteger redeliverySleepCounter
-
executorService
protected ScheduledExecutorService executorService
-
preparingShutdown
protected volatile boolean preparingShutdown
-
output
protected org.apache.camel.Processor output
-
outputAsync
protected org.apache.camel.AsyncProcessor outputAsync
-
camelContext
protected final org.apache.camel.ExtendedCamelContext camelContext
-
reactiveExecutor
protected final org.apache.camel.spi.ReactiveExecutor reactiveExecutor
-
awaitManager
protected final org.apache.camel.spi.AsyncProcessorAwaitManager awaitManager
-
shutdownStrategy
protected final org.apache.camel.spi.ShutdownStrategy shutdownStrategy
-
deadLetter
protected final org.apache.camel.Processor deadLetter
-
deadLetterUri
protected final String deadLetterUri
-
deadLetterHandleNewException
protected final boolean deadLetterHandleNewException
-
redeliveryProcessor
protected final org.apache.camel.Processor redeliveryProcessor
-
redeliveryPolicy
protected final RedeliveryPolicy redeliveryPolicy
-
retryWhilePolicy
protected final org.apache.camel.Predicate retryWhilePolicy
-
logger
protected final org.apache.camel.spi.CamelLogger logger
-
useOriginalMessagePolicy
protected final boolean useOriginalMessagePolicy
-
useOriginalBodyPolicy
protected final boolean useOriginalBodyPolicy
-
redeliveryEnabled
protected boolean redeliveryEnabled
-
simpleTask
protected boolean simpleTask
-
exchangeFormatter
protected final org.apache.camel.spi.ExchangeFormatter exchangeFormatter
-
customExchangeFormatter
protected final boolean customExchangeFormatter
-
onPrepareProcessor
protected final org.apache.camel.Processor onPrepareProcessor
-
onExceptionProcessor
protected final org.apache.camel.Processor onExceptionProcessor
-
-
Constructor Detail
-
RedeliveryErrorHandler
public RedeliveryErrorHandler(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor output, org.apache.camel.spi.CamelLogger logger, org.apache.camel.Processor redeliveryProcessor, RedeliveryPolicy redeliveryPolicy, org.apache.camel.Processor deadLetter, String deadLetterUri, boolean deadLetterHandleNewException, boolean useOriginalMessagePolicy, boolean useOriginalBodyPolicy, org.apache.camel.Predicate retryWhile, ScheduledExecutorService executorService, org.apache.camel.Processor onPrepareProcessor, org.apache.camel.Processor onExceptionProcessor)
-
-
Method Detail
-
process
public void process(org.apache.camel.Exchange exchange)
- Specified by:
process
in interfaceorg.apache.camel.Processor
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback)
Process the exchange using redelivery error handling.- Specified by:
process
in interfaceorg.apache.camel.AsyncProcessor
-
processAsync
public CompletableFuture<org.apache.camel.Exchange> processAsync(org.apache.camel.Exchange exchange)
- Specified by:
processAsync
in interfaceorg.apache.camel.AsyncProcessor
-
changeOutput
public void changeOutput(org.apache.camel.Processor output)
- Specified by:
changeOutput
in interfaceorg.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
-
supportTransacted
public boolean supportTransacted()
Description copied from class:ErrorHandlerSupport
Whether this error handler supports transacted exchanges or not.- Specified by:
supportTransacted
in classErrorHandlerSupport
-
hasNext
public boolean hasNext()
- Specified by:
hasNext
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
next
public List<org.apache.camel.Processor> next()
- Specified by:
next
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
isRunAllowedOnPreparingShutdown
protected boolean isRunAllowedOnPreparingShutdown()
-
prepareShutdown
public void prepareShutdown(boolean suspendOnly, boolean forced)
- Specified by:
prepareShutdown
in interfaceorg.apache.camel.spi.ShutdownPrepared
-
determineRedeliveryDelay
protected long determineRedeliveryDelay(org.apache.camel.Exchange exchange, RedeliveryPolicy redeliveryPolicy, long redeliveryDelay, int redeliveryCounter)
Determines the redelivery delay time by first inspecting the Message header
Exchange.REDELIVERY_DELAY
and if not present, defaulting toRedeliveryPolicy.calculateRedeliveryDelay(long, int)
In order to prevent manipulation of the RedeliveryData state, the values of
RedeliveryErrorHandler.RedeliveryTask.redeliveryDelay
andRedeliveryErrorHandler.RedeliveryTask.redeliveryCounter
are copied in.- Parameters:
exchange
- The current exchange in question.redeliveryPolicy
- The RedeliveryPolicy to use in the calculation.redeliveryDelay
- The default redelivery delay from RedeliveryDataredeliveryCounter
- The redeliveryCounter- Returns:
- The time to wait before the next redelivery.
-
defensiveCopyExchangeIfNeeded
protected org.apache.camel.Exchange defensiveCopyExchangeIfNeeded(org.apache.camel.Exchange exchange)
Performs a defensive copy of the exchange if needed- Parameters:
exchange
- the exchange- Returns:
- the defensive copy, or null if not needed (redelivery is not enabled).
-
isDone
protected boolean isDone(org.apache.camel.Exchange exchange)
Strategy to determine if the exchange is done so we can continue
-
getOutput
public org.apache.camel.Processor getOutput()
Description copied from class:ErrorHandlerSupport
Gets the output- Specified by:
getOutput
in interfaceorg.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
- Specified by:
getOutput
in classErrorHandlerSupport
-
getDeadLetter
public org.apache.camel.Processor getDeadLetter()
Returns the dead letter that message exchanges will be sent to if the redelivery attempts fail
-
getDeadLetterUri
public String getDeadLetterUri()
-
isUseOriginalMessagePolicy
public boolean isUseOriginalMessagePolicy()
-
isUseOriginalBodyPolicy
public boolean isUseOriginalBodyPolicy()
-
isDeadLetterHandleNewException
public boolean isDeadLetterHandleNewException()
-
getRedeliveryPolicy
public RedeliveryPolicy getRedeliveryPolicy()
-
getLogger
public org.apache.camel.spi.CamelLogger getLogger()
-
getDefaultHandledPredicate
protected org.apache.camel.Predicate getDefaultHandledPredicate()
-
determineIfRedeliveryIsEnabled
public boolean determineIfRedeliveryIsEnabled() throws Exception
- Specified by:
determineIfRedeliveryIsEnabled
in interfaceorg.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
- Throws:
Exception
-
doStart
protected void doStart() throws Exception
- Overrides:
doStart
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doStop
protected void doStop() throws Exception
- Overrides:
doStop
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
-