Class IdempotentReceiverInterceptor

All Implemented Interfaces:
Advice, Interceptor, MethodInterceptor, Aware, BeanFactoryAware, BeanNameAware, InitializingBean, ApplicationContextAware, ComponentSourceAware, ExpressionCapable, HandleMessageAdvice, NamedComponent

public class IdempotentReceiverInterceptor extends AbstractHandleMessageAdvice
The MethodInterceptor implementation for the Idempotent Receiver E.I. Pattern.

This MethodInterceptor works like a MessageFilter if discardChannel is provided or throwExceptionOnRejection is set to true. However if those properties aren't provided, this interceptor will create an new Message with a IntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE header when the requestMessage isn't accepted by MessageSelector.

The idempotent filtering logic depends on the provided MessageSelector.

This class is designed to be used only for the MessageHandler.handleMessage(org.springframework.messaging.Message<?>), method.

Since:
4.1
Author:
Artem Bilan, Gary Russell
See Also:
  • Constructor Details

    • IdempotentReceiverInterceptor

      public IdempotentReceiverInterceptor(MessageSelector messageSelector)
  • Method Details

    • setTimeout

      public void setTimeout(long timeout)
      Specify the timeout value for sending to the discard channel.
      Parameters:
      timeout - the timeout in milliseconds
    • setThrowExceptionOnRejection

      public void setThrowExceptionOnRejection(boolean throwExceptionOnRejection)
      Specify whether this interceptor should throw a MessageRejectedException when its selector does not accept a Message. The default value is false meaning that rejected Messages will be discarded or enriched with IntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE header and returned as normal to the invocation.proceed(). Typically this value would not be true when a discard channel is provided, but if it is, it will cause the exception to be thrown after the Message is sent to the discard channel,
      Parameters:
      throwExceptionOnRejection - true if an exception should be thrown.
      See Also:
    • setDiscardChannel

      public void setDiscardChannel(MessageChannel discardChannel)
      Specify a channel where rejected Messages should be sent. If the discard channel is null (the default), duplicate Messages will be enriched with IntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE header and returned as normal to the invocation.proceed(). However, the 'throwExceptionOnRejection' flag determines whether rejected Messages trigger an exception. That value is evaluated regardless of the presence of a discard channel.

      If there is needed just silently 'drop' rejected messages configure the discardChannel to the nullChannel.

      Parameters:
      discardChannel - The discard channel.
      See Also:
    • setDiscardChannelName

      public void setDiscardChannelName(String discardChannelName)
      Specify a channel name where rejected Messages should be sent. If the discard channel is null (the default), duplicate Messages will be enriched with IntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE header and returned as normal to the invocation.proceed(). However, the 'throwExceptionOnRejection' flag determines whether rejected Messages trigger an exception. That value is evaluated regardless of the presence of a discard channel.

      If there is needed just silently 'drop' rejected messages configure the discardChannel to the nullChannel.

      Only applies if a discardChannel is not provided.

      Parameters:
      discardChannelName - The discard channel name.
      Since:
      5.0.1
      See Also:
    • getComponentType

      public String getComponentType()
      Description copied from class: IntegrationObjectSupport
      Subclasses may implement this method to provide component type information.
      Specified by:
      getComponentType in interface NamedComponent
      Overrides:
      getComponentType in class IntegrationObjectSupport
    • doInvoke

      protected Object doInvoke(MethodInvocation invocation, Message<?> message) throws Throwable
      Specified by:
      doInvoke in class AbstractHandleMessageAdvice
      Throws:
      Throwable