Class ConditionalRejectingErrorHandler
java.lang.Object
org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler
- All Implemented Interfaces:
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
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionCreate a handler with theConditionalRejectingErrorHandler.DefaultExceptionStrategy.ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy) Create a handler with the suppliedFatalExceptionStrategyimplementation. -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanReturn true if there is already anAmqpRejectAndDontRequeueExceptionpresent in the cause chain.protected FatalExceptionStrategyReturn the exception strategy.protected voidhandleDiscarded(Message failed) Called when a message with a fatal exception has anx-deathheader, prior to discarding the message.voidprotected booleanReturn the discardFatalsWithXDeath.protected booleanReturn the rejectManual.protected voidLog the throwable at WARN level, including stack trace.voidsetDiscardFatalsWithXDeath(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.voidsetRejectManual(boolean rejectManual) Set to false to NOT reject a fatal message when MANUAL ack mode is being used.
-
Field Details
-
logger
-
-
Constructor Details
-
ConditionalRejectingErrorHandler
public ConditionalRejectingErrorHandler()Create a handler with theConditionalRejectingErrorHandler.DefaultExceptionStrategy. -
ConditionalRejectingErrorHandler
Create a handler with the suppliedFatalExceptionStrategyimplementation.- Parameters:
exceptionStrategy- The strategy implementation.
-
-
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
Return the exception strategy.- Returns:
- the strategy.
- Since:
- 2.3
-
handleError
- Specified by:
handleErrorin interfaceErrorHandler
-
handleDiscarded
Called when a message with a fatal exception has anx-deathheader, 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
Log the throwable at WARN level, including stack trace. Subclasses can override this behavior.- Parameters:
t- theThrowable.- Since:
- 1.7.8
-
causeChainContainsARADRE
Return true if there is already anAmqpRejectAndDontRequeueExceptionpresent in the cause chain.- Parameters:
t- aThrowable.- Returns:
- true if the cause chain already contains an
AmqpRejectAndDontRequeueException. - Since:
- 1.7.8
-