Class ConditionalRejectingErrorHandler

java.lang.Object
org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler
All Implemented Interfaces:
ErrorHandler

public class ConditionalRejectingErrorHandler extends Object implements ErrorHandler
ErrorHandler that conditionally wraps the Exception in an AmqpRejectAndDontRequeueException if the configured rejection strategy determines that the message is fatal and should not be requeued. Such messages will be discarded or sent to a Dead Letter Exchange, depending on broker configuration.

The default strategy will do this if the exception is a ListenerExecutionFailedException with a cause of MessageConversionException, MessageConversionException, MethodArgumentNotValidException, MethodArgumentTypeMismatchException, NoSuchMethodException or ClassCastException.

The exception will not be wrapped if the cause chain already contains an AmqpRejectAndDontRequeueException.

Since:
1.3.2
Author:
Gary Russell
  • Field Details

    • logger

      protected final Log logger
  • Constructor Details

  • Method Details

    • isDiscardFatalsWithXDeath

      protected boolean isDiscardFatalsWithXDeath()
      Return the discardFatalsWithXDeath.
      Returns:
      the discardFatalsWithXDeath.
      Since:
      2.3
      See Also:
    • setDiscardFatalsWithXDeath

      public void setDiscardFatalsWithXDeath(boolean discardFatalsWithXDeath)
      Set to false to disable the (now) default behavior of logging and discarding messages that cause fatal exceptions and have an `x-death` header; which usually means that the message has been republished after previously being sent to a DLQ.
      Parameters:
      discardFatalsWithXDeath - false to disable.
      Since:
      2.1
    • isRejectManual

      protected boolean isRejectManual()
      Return the rejectManual.
      Returns:
      the rejectManual.
      Since:
      2.3
      See Also:
    • setRejectManual

      public void setRejectManual(boolean rejectManual)
      Set to false to NOT reject a fatal message when MANUAL ack mode is being used.
      Parameters:
      rejectManual - false to leave the message in an unack'd state.
      Since:
      2.1.9
    • getExceptionStrategy

      protected FatalExceptionStrategy getExceptionStrategy()
      Return the exception strategy.
      Returns:
      the strategy.
      Since:
      2.3
    • handleError

      public void handleError(Throwable t)
      Specified by:
      handleError in interface ErrorHandler
    • handleDiscarded

      protected void handleDiscarded(Message failed)
      Called when a message with a fatal exception has an x-death header, prior to discarding the message. Subclasses can override this method to perform some action, such as sending the message to a parking queue.
      Parameters:
      failed - the failed message.
      Since:
      2.3
    • log

      protected void log(Throwable t)
      Log the throwable at WARN level, including stack trace. Subclasses can override this behavior.
      Parameters:
      t - the Throwable.
      Since:
      1.7.8
    • causeChainContainsARADRE

      protected boolean causeChainContainsARADRE(Throwable t)
      Return true if there is already an AmqpRejectAndDontRequeueException present in the cause chain.
      Parameters:
      t - a Throwable.
      Returns:
      true if the cause chain already contains an AmqpRejectAndDontRequeueException.
      Since:
      1.7.8