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
-
Field Summary
-
Constructor Summary
ConstructorDescriptionCreate a handler with theConditionalRejectingErrorHandler.DefaultExceptionStrategy
.ConditionalRejectingErrorHandler
(FatalExceptionStrategy exceptionStrategy) Create a handler with the suppliedFatalExceptionStrategy
implementation. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
Return true if there is already anAmqpRejectAndDontRequeueException
present in the cause chain.protected FatalExceptionStrategy
Return the exception strategy.protected void
handleDiscarded
(Message failed) Called when a message with a fatal exception has anx-death
header, prior to discarding the message.void
protected boolean
Return the discardFatalsWithXDeath.protected boolean
Return the rejectManual.protected void
Log the throwable at WARN level, including stack trace.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.void
setRejectManual
(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 suppliedFatalExceptionStrategy
implementation.- 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:
handleError
in interfaceErrorHandler
-
handleDiscarded
Called when a message with a fatal exception has anx-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
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 anAmqpRejectAndDontRequeueException
present in the cause chain.- Parameters:
t
- aThrowable
.- Returns:
- true if the cause chain already contains an
AmqpRejectAndDontRequeueException
. - Since:
- 1.7.8
-