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.

  • Field Details

    • 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.CamelContext 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 Details

    • 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 Details

    • process

      public void process(org.apache.camel.Exchange exchange)
      Specified by:
      process in interface org.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 interface org.apache.camel.AsyncProcessor
    • processAsync

      public CompletableFuture<org.apache.camel.Exchange> processAsync(org.apache.camel.Exchange exchange)
      Specified by:
      processAsync in interface org.apache.camel.AsyncProcessor
    • changeOutput

      public void changeOutput(org.apache.camel.Processor output)
      Specified by:
      changeOutput in interface org.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 class ErrorHandlerSupport
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface org.apache.camel.Navigate<org.apache.camel.Processor>
    • next

      public List<org.apache.camel.Processor> next()
      Specified by:
      next in interface org.apache.camel.Navigate<org.apache.camel.Processor>
    • isRunAllowedOnPreparingShutdown

      protected boolean isRunAllowedOnPreparingShutdown()
    • prepareShutdown

      public void prepareShutdown(boolean suspendOnly, boolean forced)
      Specified by:
      prepareShutdown in interface org.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 to RedeliveryPolicy.calculateRedeliveryDelay(long, int)

      In order to prevent manipulation of the RedeliveryData state, the values of RedeliveryErrorHandler.RedeliveryTask.redeliveryDelay and RedeliveryErrorHandler.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 RedeliveryData
      redeliveryCounter - 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 interface org.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
      Specified by:
      getOutput in class ErrorHandlerSupport
    • 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 interface org.apache.camel.spi.ErrorHandlerRedeliveryCustomizer
      Throws:
      Exception
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.apache.camel.support.service.BaseService
      Throws:
      Exception
    • doStop

      protected void doStop() throws Exception
      Overrides:
      doStop in class org.apache.camel.support.service.BaseService
      Throws:
      Exception
    • doShutdown

      protected void doShutdown() throws Exception
      Overrides:
      doShutdown in class org.apache.camel.support.service.BaseService
      Throws:
      Exception