Class RepublishMessageRecoverer

java.lang.Object
org.springframework.amqp.rabbit.retry.RepublishMessageRecoverer
All Implemented Interfaces:
MessageRecoverer
Direct Known Subclasses:
RepublishMessageRecovererWithConfirms

public class RepublishMessageRecoverer extends 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 Details

  • Constructor Details

    • RepublishMessageRecoverer

      public RepublishMessageRecoverer(AmqpTemplate errorTemplate)
      Create an instance with the provided template.
      Parameters:
      errorTemplate - the template.
    • RepublishMessageRecoverer

      public RepublishMessageRecoverer(AmqpTemplate errorTemplate, String errorExchange)
      Create an instance with the provided properties.
      Parameters:
      errorTemplate - the template.
      errorExchange - the exchange.
    • RepublishMessageRecoverer

      public RepublishMessageRecoverer(AmqpTemplate errorTemplate, @Nullable String errorExchange, @Nullable 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 Details

    • errorRoutingKeyPrefix

      public RepublishMessageRecoverer errorRoutingKeyPrefix(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(String errorRoutingKeyPrefix)
      Parameters:
      errorRoutingKeyPrefix - The prefix (default "error.").
      See Also:
    • getErrorRoutingKeyPrefix

      protected String getErrorRoutingKeyPrefix()
    • setDeliveryMode

      public void setDeliveryMode(MessageDeliveryMode deliveryMode)
      Specify a MessageDeliveryMode 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, Throwable cause)
      Description copied from interface: MessageRecoverer
      Callback for message that was consumed but failed all retry attempts.
      Specified by:
      recover in interface MessageRecoverer
      Parameters:
      message - the message to recover
      cause - the cause of the error
    • doSend

      protected void doSend(@Nullable String exchange, 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 Map<? extends String,?> additionalHeaders(Message message, 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 String prefixedOriginalRoutingKey(Message message)
      The default behavior of this method is to append the received routing key to the routingKeyPrefix. This is only invoked if the routing key is null.
      Parameters:
      message - the message.
      Returns:
      the routing key.
    • getStackTraceAsString

      protected String getStackTraceAsString(Throwable cause)
      Create a String representation of the stack trace.
      Parameters:
      cause - the throwable.
      Returns:
      the String.
      Since:
      2.4.8