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 anAmqpRejectAndDontRequeueException
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 ofMessageConversionException
,MessageConversionException
,MethodArgumentNotValidException
,MethodArgumentTypeMismatchException
,NoSuchMethodException
orClassCastException
.The exception will not be wrapped if the
cause
chain already contains anAmqpRejectAndDontRequeueException
.- Since:
- 1.3.2
- Author:
- Gary Russell
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ConditionalRejectingErrorHandler.DefaultExceptionStrategy
Default implementation ofFatalExceptionStrategy
.
-
Constructor Summary
Constructors Constructor Description ConditionalRejectingErrorHandler()
Create a handler with theConditionalRejectingErrorHandler.DefaultExceptionStrategy
.ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
Create a handler with the suppliedFatalExceptionStrategy
implementation.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
causeChainContainsARADRE(Throwable t)
Return true if there is already anAmqpRejectAndDontRequeueException
present in the cause chain.protected FatalExceptionStrategy
getExceptionStrategy()
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
handleError(Throwable t)
protected boolean
isDiscardFatalsWithXDeath()
Return the discardFatalsWithXDeath.protected boolean
isRejectManual()
Return the rejectManual.protected void
log(Throwable t)
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 Detail
-
logger
protected final Log logger
-
-
Constructor Detail
-
ConditionalRejectingErrorHandler
public ConditionalRejectingErrorHandler()
Create a handler with theConditionalRejectingErrorHandler.DefaultExceptionStrategy
.
-
ConditionalRejectingErrorHandler
public ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
Create a handler with the suppliedFatalExceptionStrategy
implementation.- Parameters:
exceptionStrategy
- The strategy implementation.
-
-
Method Detail
-
isDiscardFatalsWithXDeath
protected boolean isDiscardFatalsWithXDeath()
Return the discardFatalsWithXDeath.- Returns:
- the discardFatalsWithXDeath.
- Since:
- 2.3
- See Also:
setDiscardFatalsWithXDeath(boolean)
-
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(boolean)
-
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 interfaceErrorHandler
-
handleDiscarded
protected void handleDiscarded(Message failed)
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
protected void log(Throwable t)
Log the throwable at WARN level, including stack trace. Subclasses can override this behavior.- Parameters:
t
- theThrowable
.- Since:
- 1.7.8
-
causeChainContainsARADRE
protected boolean causeChainContainsARADRE(Throwable t)
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
-
-