Class SnsMessageHandler
java.lang.Object
org.springframework.integration.context.IntegrationObjectSupport
org.springframework.integration.handler.MessageHandlerSupport
org.springframework.integration.handler.AbstractMessageHandler
org.springframework.integration.handler.AbstractMessageProducingHandler
org.springframework.integration.aws.outbound.AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
org.springframework.integration.aws.outbound.SnsMessageHandler
- All Implemented Interfaces:
org.reactivestreams.Subscriber<org.springframework.messaging.Message<?>>,org.springframework.beans.factory.Aware,org.springframework.beans.factory.BeanFactoryAware,org.springframework.beans.factory.BeanNameAware,org.springframework.beans.factory.DisposableBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware,org.springframework.core.Ordered,org.springframework.integration.context.ExpressionCapable,org.springframework.integration.context.Orderable,org.springframework.integration.core.MessageProducer,org.springframework.integration.handler.HeaderPropagationAware,org.springframework.integration.IntegrationPattern,org.springframework.integration.support.context.NamedComponent,org.springframework.integration.support.management.IntegrationManagement,org.springframework.integration.support.management.TrackableComponent,org.springframework.messaging.MessageHandler,reactor.core.CoreSubscriber<org.springframework.messaging.Message<?>>
The
AbstractAwsMessageHandler implementation to send SNS Notifications
(AmazonSNSAsync.publishAsync(PublishRequest)) to the provided topicArn
(or evaluated at runtime against Message).
The SNS Message subject can be evaluated as a result of subjectExpression.
The algorithm to populate SNS Message body is like:
- If the
payload instanceof PublishRequestit is used as is for publishing. - If the
bodyExpressionis specified, it is used to be evaluated againstrequestMessage. - If the evaluation result (or
payload) is instance ofSnsBodyBuilder, the SNS Message is built from there and themessageStructureof thePublishRequestis set tojson. For the convenience the packageorg.springframework.integration.aws.supportis imported to theAbstractAwsMessageHandler.getEvaluationContext()to allow bypass it for theSnsBodyBuilderfrom thebodyExpressiondefinition. For example:String bodyExpression = "SnsBodyBuilder.withDefault(payload).forProtocols(payload.substring(0, 140), 'sms')"; snsMessageHandler.setBodyExpression(spelExpressionParser.parseExpression(bodyExpression)); - Otherwise the
payload(or thebodyExpressionevaluation result) is converted to theStringusingIntegrationObjectSupport.getConversionService().
- Author:
- Artem Bilan, Christopher Smith
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.springframework.integration.support.management.IntegrationManagement
org.springframework.integration.support.management.IntegrationManagement.ManagementOverrides -
Field Summary
Fields inherited from class org.springframework.integration.aws.outbound.AbstractAwsMessageHandler
DEFAULT_SEND_TIMEOUTFields inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
messagingTemplateFields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, loggerFields inherited from interface org.springframework.integration.support.management.IntegrationManagement
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAMEFields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidadditionalOnSuccessHeaders(org.springframework.integration.support.AbstractIntegrationMessageBuilder<?> messageBuilder, AmazonWebServiceRequest request, Object result) protected Future<?>handleMessageToAws(org.springframework.messaging.Message<?> message) protected voidonInit()voidsetBodyExpression(org.springframework.expression.Expression bodyExpression) TheExpressionto produce the SNS notification message.voidsetMessageDeduplicationIdExpression(org.springframework.expression.Expression messageDeduplicationIdExpression) TheExpressionto determine the deduplication ID for this message.voidsetMessageGroupId(String messageGroupId) A fixed message-group ID to be set for messages sent to an SNS FIFO topic from this handler.voidsetMessageGroupIdExpression(org.springframework.expression.Expression messageGroupIdExpression) TheExpressionto determine the message group for messages sent to an SNS FIFO topic from this handler.voidsetResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver) Specify aResourceIdResolverto resolve logical topic names to physical resource ids.voidsetSubject(String subject) voidsetSubjectExpression(org.springframework.expression.Expression subjectExpression) voidsetTopicArn(String topicArn) voidsetTopicArnExpression(org.springframework.expression.Expression topicArnExpression) Methods inherited from class org.springframework.integration.aws.outbound.AbstractAwsMessageHandler
doSetHeaderMapper, getAsyncHandler, getErrorMessageStrategy, getEvaluationContext, getFailureChannel, getHeaderMapper, getSendTimeoutExpression, handleMessageInternal, isSync, obtainAsyncHandler, setAsyncHandler, setErrorMessageStrategy, setFailureChannel, setFailureChannelName, setHeaderMapper, setSendTimeout, setSendTimeoutExpression, setSendTimeoutExpressionString, setSyncMethods inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeadersMethods inherited from class org.springframework.integration.handler.AbstractMessageHandler
handleMessage, onComplete, onError, onNext, onSubscribeMethods inherited from class org.springframework.integration.handler.MessageHandlerSupport
buildSendTimer, destroy, getComponentType, getIntegrationPatternType, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrackMethods 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, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface reactor.core.CoreSubscriber
currentContextMethods inherited from interface org.springframework.integration.support.management.IntegrationManagement
getThisAsMethods inherited from interface org.springframework.integration.support.context.NamedComponent
getBeanName, getComponentName
-
Constructor Details
-
SnsMessageHandler
-
-
Method Details
-
setTopicArn
-
setTopicArnExpression
public void setTopicArnExpression(org.springframework.expression.Expression topicArnExpression) -
setSubject
-
setSubjectExpression
public void setSubjectExpression(org.springframework.expression.Expression subjectExpression) -
setMessageGroupId
A fixed message-group ID to be set for messages sent to an SNS FIFO topic from this handler. Equivalent to calling {setMessageGroupIdExpression(Expression)with a literal string expression.- Parameters:
messageGroupId- the group ID to be used for all messages sent from this handler- Since:
- 2.5.3
-
setMessageGroupIdExpression
public void setMessageGroupIdExpression(org.springframework.expression.Expression messageGroupIdExpression) TheExpressionto determine the message group for messages sent to an SNS FIFO topic from this handler.- Parameters:
messageGroupIdExpression- theExpressionto produce the message-group ID- Since:
- 2.5.3
-
setMessageDeduplicationIdExpression
public void setMessageDeduplicationIdExpression(org.springframework.expression.Expression messageDeduplicationIdExpression) TheExpressionto determine the deduplication ID for this message. SNS FIFO topics require a message deduplication ID to be specified, either in the adapter configuration or on aPublishRequestpayload of the requestMessage, unless content-based deduplication is enabled on the topic.- Parameters:
messageDeduplicationIdExpression- theExpressionto produce the message deduplication ID- Since:
- 2.5.3
-
setBodyExpression
public void setBodyExpression(org.springframework.expression.Expression bodyExpression) TheExpressionto produce the SNS notification message. If it evaluates to theSnsBodyBuilderthemessageStructureof thePublishRequestis set tojson. Otherwise, theIntegrationObjectSupport.getConversionService()is used to convert the evaluation result to theStringwithout setting themessageStructure.- Parameters:
bodyExpression- theExpressionto produce the SNS notification message.
-
setResourceIdResolver
public void setResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver) Specify aResourceIdResolverto resolve logical topic names to physical resource ids.- Parameters:
resourceIdResolver- theResourceIdResolverto use.
-
onInit
protected void onInit()- Overrides:
onInitin classAbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
-
handleMessageToAws
- Specified by:
handleMessageToAwsin classAbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
-
additionalOnSuccessHeaders
protected void additionalOnSuccessHeaders(org.springframework.integration.support.AbstractIntegrationMessageBuilder<?> messageBuilder, AmazonWebServiceRequest request, Object result) - Specified by:
additionalOnSuccessHeadersin classAbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
-