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
.
Modifier and Type | Class and Description |
---|---|
static class |
ConditionalRejectingErrorHandler.DefaultExceptionStrategy
Default implementation of
FatalExceptionStrategy . |
Constructor and Description |
---|
ConditionalRejectingErrorHandler()
Create a handler with the
ConditionalRejectingErrorHandler.DefaultExceptionStrategy . |
ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
Create a handler with the supplied
FatalExceptionStrategy implementation. |
Modifier and Type | Method and Description |
---|---|
protected boolean |
causeChainContainsARADRE(Throwable t)
Return true if there is already an
AmqpRejectAndDontRequeueException
present in the cause chain. |
void |
handleError(Throwable t) |
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.
|
protected final Log logger
public ConditionalRejectingErrorHandler()
ConditionalRejectingErrorHandler.DefaultExceptionStrategy
.public ConditionalRejectingErrorHandler(FatalExceptionStrategy exceptionStrategy)
FatalExceptionStrategy
implementation.exceptionStrategy
- The strategy implementation.public void setDiscardFatalsWithXDeath(boolean discardFatalsWithXDeath)
discardFatalsWithXDeath
- false to disable.public void setRejectManual(boolean rejectManual)
rejectManual
- false to leave the message in an unack'd state.public void handleError(Throwable t)
handleError
in interface ErrorHandler
protected void log(Throwable t)
t
- the Throwable
.protected boolean causeChainContainsARADRE(Throwable t)
AmqpRejectAndDontRequeueException
present in the cause chain.t
- a Throwable
.AmqpRejectAndDontRequeueException
.