Class RepublishMessageRecoverer
- java.lang.Object
-
- org.springframework.amqp.rabbit.retry.RepublishMessageRecoverer
-
- All Implemented Interfaces:
MessageRecoverer
- Direct Known Subclasses:
RepublishMessageRecovererWithConfirms
public class RepublishMessageRecoverer extends java.lang.Object implements MessageRecoverer
MessageRecoverer
implementation that republishes recovered messages to a specified exchange with the exception stack trace stored in the message header x-exception.If no routing key is provided, the original routing key for the message, prefixed with
setErrorRoutingKeyPrefix(String)
(default "error.") will be used to publish the message to the exchange provided in name, or the template's default exchange if none is set.- Since:
- 1.3
- Author:
- James Carr, Gary Russell, Artem Bilan
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_FRAME_MAX_HEADROOM
protected Expression
errorExchangeNameExpression
protected Expression
errorRoutingKeyExpression
protected AmqpTemplate
errorTemplate
protected EvaluationContext
evaluationContext
protected Log
logger
static java.lang.String
X_EXCEPTION_MESSAGE
static java.lang.String
X_EXCEPTION_STACKTRACE
static java.lang.String
X_ORIGINAL_EXCHANGE
static java.lang.String
X_ORIGINAL_ROUTING_KEY
-
Constructor Summary
Constructors Constructor Description RepublishMessageRecoverer(AmqpTemplate errorTemplate)
Create an instance with the provided template.RepublishMessageRecoverer(AmqpTemplate errorTemplate, java.lang.String errorExchange)
Create an instance with the provided properties.RepublishMessageRecoverer(AmqpTemplate errorTemplate, java.lang.String errorExchange, java.lang.String errorRoutingKey)
Create an instance with the provided properties.RepublishMessageRecoverer(AmqpTemplate errorTemplate, Expression errorExchange, Expression errorRoutingKey)
Create an instance with the provided properties.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.util.Map<? extends java.lang.String,?>
additionalHeaders(Message message, java.lang.Throwable cause)
Subclasses can override this method to add more headers to the republished message.protected void
doSend(java.lang.String exchange, java.lang.String routingKey, Message message)
Send the message.RepublishMessageRecoverer
errorRoutingKeyPrefix(java.lang.String errorRoutingKeyPrefix)
Apply a prefix to the outbound routing key, which will be prefixed to the original message routing key (if no explicit routing key was provided in the constructor; ignored otherwise.RepublishMessageRecoverer
frameMaxHeadroom(int headroom)
Set the amount by which the negotiated frame_max is to be reduced when considering truncating the stack trace header.protected MessageDeliveryMode
getDeliveryMode()
protected java.lang.String
getErrorRoutingKeyPrefix()
protected java.lang.String
getStackTraceAsString(java.lang.Throwable cause)
Create a String representation of the stack trace.protected java.lang.String
prefixedOriginalRoutingKey(Message message)
The default behavior of this method is to append the received routing key to theroutingKeyPrefix
.void
recover(Message message, java.lang.Throwable cause)
Callback for message that was consumed but failed all retry attempts.void
setDeliveryMode(MessageDeliveryMode deliveryMode)
Specify aMessageDeliveryMode
to set into the message to republish if the message doesn't have it already.void
setErrorRoutingKeyPrefix(java.lang.String errorRoutingKeyPrefix)
-
-
-
Field Detail
-
X_EXCEPTION_STACKTRACE
public static final java.lang.String X_EXCEPTION_STACKTRACE
- See Also:
- Constant Field Values
-
X_EXCEPTION_MESSAGE
public static final java.lang.String X_EXCEPTION_MESSAGE
- See Also:
- Constant Field Values
-
X_ORIGINAL_EXCHANGE
public static final java.lang.String X_ORIGINAL_EXCHANGE
- See Also:
- Constant Field Values
-
X_ORIGINAL_ROUTING_KEY
public static final java.lang.String X_ORIGINAL_ROUTING_KEY
- See Also:
- Constant Field Values
-
DEFAULT_FRAME_MAX_HEADROOM
public static final int DEFAULT_FRAME_MAX_HEADROOM
- See Also:
- Constant Field Values
-
logger
protected final Log logger
-
errorTemplate
protected final AmqpTemplate errorTemplate
-
errorRoutingKeyExpression
protected final Expression errorRoutingKeyExpression
-
errorExchangeNameExpression
protected final Expression errorExchangeNameExpression
-
evaluationContext
protected final EvaluationContext evaluationContext
-
-
Constructor Detail
-
RepublishMessageRecoverer
public RepublishMessageRecoverer(AmqpTemplate errorTemplate)
Create an instance with the provided template.- Parameters:
errorTemplate
- the template.
-
RepublishMessageRecoverer
public RepublishMessageRecoverer(AmqpTemplate errorTemplate, java.lang.String errorExchange)
Create an instance with the provided properties.- Parameters:
errorTemplate
- the template.errorExchange
- the exchange.
-
RepublishMessageRecoverer
public RepublishMessageRecoverer(AmqpTemplate errorTemplate, @Nullable java.lang.String errorExchange, @Nullable java.lang.String errorRoutingKey)
Create an instance with the provided properties. If the exchange or routing key is null, the template's default will be used.- Parameters:
errorTemplate
- the template.errorExchange
- the exchange.errorRoutingKey
- the routing key.
-
RepublishMessageRecoverer
public RepublishMessageRecoverer(AmqpTemplate errorTemplate, @Nullable Expression errorExchange, @Nullable Expression errorRoutingKey)
Create an instance with the provided properties. If the exchange or routing key evaluate to null, the template's default will be used.- Parameters:
errorTemplate
- the template.errorExchange
- the exchange expression, evaluated against the message.errorRoutingKey
- the routing key, evaluated against the message.
-
-
Method Detail
-
errorRoutingKeyPrefix
public RepublishMessageRecoverer errorRoutingKeyPrefix(java.lang.String errorRoutingKeyPrefix)
Apply a prefix to the outbound routing key, which will be prefixed to the original message routing key (if no explicit routing key was provided in the constructor; ignored otherwise. Use an empty string ("") for no prefixing.- Parameters:
errorRoutingKeyPrefix
- The prefix (default "error.").- Returns:
- this.
-
frameMaxHeadroom
public RepublishMessageRecoverer frameMaxHeadroom(int headroom)
Set the amount by which the negotiated frame_max is to be reduced when considering truncating the stack trace header. Defaults to 20000.- Parameters:
headroom
- the headroom- Returns:
- this.
- Since:
- 2.0.5
-
setErrorRoutingKeyPrefix
public void setErrorRoutingKeyPrefix(java.lang.String errorRoutingKeyPrefix)
- Parameters:
errorRoutingKeyPrefix
- The prefix (default "error.").- See Also:
errorRoutingKeyPrefix(String)
-
getErrorRoutingKeyPrefix
protected java.lang.String getErrorRoutingKeyPrefix()
-
setDeliveryMode
public void setDeliveryMode(MessageDeliveryMode deliveryMode)
Specify aMessageDeliveryMode
to set into the message to republish if the message doesn't have it already.- Parameters:
deliveryMode
- the delivery mode to set to message.- Since:
- 2.0
-
getDeliveryMode
protected MessageDeliveryMode getDeliveryMode()
-
recover
public void recover(Message message, java.lang.Throwable cause)
Description copied from interface:MessageRecoverer
Callback for message that was consumed but failed all retry attempts.- Specified by:
recover
in interfaceMessageRecoverer
- Parameters:
message
- the message to recovercause
- the cause of the error
-
doSend
protected void doSend(@Nullable java.lang.String exchange, java.lang.String routingKey, Message message)
Send the message.- Parameters:
exchange
- the exchange or null to use the template's default.routingKey
- the routing key.message
- the message.- Since:
- 2.3.3
-
additionalHeaders
protected java.util.Map<? extends java.lang.String,?> additionalHeaders(Message message, java.lang.Throwable cause)
Subclasses can override this method to add more headers to the republished message.- Parameters:
message
- The failed message.cause
- The cause.- Returns:
- A
Map
of additional headers to add.
-
prefixedOriginalRoutingKey
protected java.lang.String prefixedOriginalRoutingKey(Message message)
The default behavior of this method is to append the received routing key to theroutingKeyPrefix
. This is only invoked if the routing key is null.- Parameters:
message
- the message.- Returns:
- the routing key.
-
getStackTraceAsString
protected java.lang.String getStackTraceAsString(java.lang.Throwable cause)
Create a String representation of the stack trace.- Parameters:
cause
- the throwable.- Returns:
- the String.
- Since:
- 2.4.8
-
-