Class IdempotentReceiverInterceptor
- All Implemented Interfaces:
Advice
,Interceptor
,MethodInterceptor
,Aware
,BeanFactoryAware
,BeanNameAware
,InitializingBean
,ApplicationContextAware
,ComponentSourceAware
,ExpressionCapable
,HandleMessageAdvice
,NamedComponent
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:
-
Field Summary
Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, logger
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Object
doInvoke
(MethodInvocation invocation, Message<?> message) 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, getComponentDescription, getComponentName, getComponentSource, getConversionService, getExpression, getIntegrationProperties, getMessageBuilderFactory, getTaskScheduler, isInitialized, onInit, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentDescription, setComponentName, setComponentSource, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString
-
Constructor Details
-
IdempotentReceiverInterceptor
-
-
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
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:
-
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:
-
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
-