Class IdempotentReceiverInterceptor
- All Implemented Interfaces:
Advice
,Interceptor
,MethodInterceptor
,Aware
,BeanFactoryAware
,BeanNameAware
,InitializingBean
,ApplicationContextAware
,ExpressionCapable
,HandleMessageAdvice
,NamedComponent
public class IdempotentReceiverInterceptor extends AbstractHandleMessageAdvice
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:
MetadataStoreSelector
,IdempotentReceiverAutoProxyCreatorInitializer
-
Field Summary
Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, logger
-
Constructor Summary
Constructors Constructor Description IdempotentReceiverInterceptor(MessageSelector messageSelector)
-
Method Summary
Modifier and Type Method Description protected Object
doInvoke(MethodInvocation invocation, Message<?> message)
String
getComponentType()
Subclasses may implement this method to provide component type information.void
setDiscardChannel(MessageChannel discardChannel)
Specify a channel where rejected Messages should be sent.void
setDiscardChannelName(String discardChannelName)
Specify a channel name where rejected Messages should be sent.void
setThrowExceptionOnRejection(boolean throwExceptionOnRejection)
Specify whether this interceptor should throw aMessageRejectedException
when its selector does not accept a Message.void
setTimeout(long timeout)
Specify the timeout value for sending to the discard channel.Methods inherited from class org.springframework.integration.handler.advice.AbstractHandleMessageAdvice
invoke
Methods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, onInit, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString
-
Constructor Details
-
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 aMessageRejectedException
when its selector does not accept a Message. The default value isfalse
meaning that rejected Messages will be discarded or enriched withIntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE
header and returned as normal to theinvocation.proceed()
. Typically this value would not betrue
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(MessageChannel)
-
setDiscardChannel
Specify a channel where rejected Messages should be sent. If the discard channel is null (the default), duplicate Messages will be enriched withIntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE
header and returned as normal to theinvocation.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 thenullChannel
.- Parameters:
discardChannel
- The discard channel.- See Also:
setThrowExceptionOnRejection(boolean)
-
setDiscardChannelName
Specify a channel name where rejected Messages should be sent. If the discard channel is null (the default), duplicate Messages will be enriched withIntegrationMessageHeaderAccessor.DUPLICATE_MESSAGE
header and returned as normal to theinvocation.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 thenullChannel
.Only applies if a
discardChannel
is not provided.- Parameters:
discardChannelName
- The discard channel name.- Since:
- 5.0.1
- See Also:
setThrowExceptionOnRejection(boolean)
-
getComponentType
Description copied from class:IntegrationObjectSupport
Subclasses may implement this method to provide component type information.- Specified by:
getComponentType
in interfaceNamedComponent
- Overrides:
getComponentType
in classIntegrationObjectSupport
-
doInvoke
- Specified by:
doInvoke
in classAbstractHandleMessageAdvice
- Throws:
Throwable
-