public class IdempotentReceiverInterceptor extends Object implements org.aopalliance.intercept.MethodInterceptor, BeanFactoryAware
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.
MetadataStoreSelector,
IdempotentReceiverAutoProxyCreatorInitializer| Modifier and Type | Field and Description |
|---|---|
protected org.apache.commons.logging.Log |
logger |
| Constructor and Description |
|---|
IdempotentReceiverInterceptor(MessageSelector messageSelector) |
| Modifier and Type | Method and Description |
|---|---|
protected MessageBuilderFactory |
getMessageBuilderFactory() |
Object |
invoke(org.aopalliance.intercept.MethodInvocation invocation) |
void |
setBeanFactory(BeanFactory beanFactory) |
void |
setDiscardChannel(MessageChannel discardChannel)
Specify a channel where rejected Messages should be sent.
|
void |
setThrowExceptionOnRejection(boolean throwExceptionOnRejection)
Specify whether this interceptor should throw a
MessageRejectedException when its selector does not accept a
Message. |
void |
setTimeout(long timeout)
Specify the timeout value for sending to the discard channel.
|
public IdempotentReceiverInterceptor(MessageSelector messageSelector)
public void setTimeout(long timeout)
timeout - the timeout in millisecondspublic void setThrowExceptionOnRejection(boolean throwExceptionOnRejection)
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,throwExceptionOnRejection - true if an exception should be thrown.setDiscardChannel(MessageChannel)public void setDiscardChannel(MessageChannel discardChannel)
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.
discardChannel - The discard channel.setThrowExceptionOnRejection(boolean)public void setBeanFactory(BeanFactory beanFactory) throws BeansException
setBeanFactory in interface BeanFactoryAwareBeansExceptionprotected MessageBuilderFactory getMessageBuilderFactory()