Class IdempotentReceiverInterceptor
- All Implemented Interfaces:
Advice,Interceptor,MethodInterceptor,Aware,BeanFactoryAware,BeanNameAware,InitializingBean,ApplicationContextAware,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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected ObjectdoInvoke(MethodInvocation invocation, Message<?> message) Subclasses may implement this method to provide component type information.voidsetDiscardChannel(MessageChannel discardChannel) Specify a channel where rejected Messages should be sent.voidsetDiscardChannelName(String discardChannelName) Specify a channel name where rejected Messages should be sent.voidsetThrowExceptionOnRejection(boolean throwExceptionOnRejection) Specify whether this interceptor should throw aMessageRejectedExceptionwhen its selector does not accept a Message.voidsetTimeout(long timeout) Specify the timeout value for sending to the discard channel.Methods inherited from class org.springframework.integration.handler.advice.AbstractHandleMessageAdvice
invokeMethods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getMessageBuilderFactory, getTaskScheduler, isInitialized, onInit, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, 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 aMessageRejectedExceptionwhen its selector does not accept a Message. The default value isfalsemeaning that rejected Messages will be discarded or enriched withIntegrationMessageHeaderAccessor.DUPLICATE_MESSAGEheader and returned as normal to theinvocation.proceed(). Typically this value would not betruewhen 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_MESSAGEheader 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
discardChannelto 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_MESSAGEheader 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
discardChannelto thenullChannel.Only applies if a
discardChannelis not provided.- Parameters:
discardChannelName- The discard channel name.- Since:
- 5.0.1
- See Also:
-
getComponentType
Description copied from class:IntegrationObjectSupportSubclasses may implement this method to provide component type information.- Specified by:
getComponentTypein interfaceNamedComponent- Overrides:
getComponentTypein classIntegrationObjectSupport
-
doInvoke
- Specified by:
doInvokein classAbstractHandleMessageAdvice- Throws:
Throwable
-