Class 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 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
      • errorRoutingKeyExpression

        protected final Expression errorRoutingKeyExpression
      • errorExchangeNameExpression

        protected final Expression errorExchangeNameExpression
    • 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 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
      • 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 interface MessageRecoverer
        Parameters:
        message - the message to recover
        cause - 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 the routingKeyPrefix. 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