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
io.awspring.cloud.sns.integration.SnsMessageHandler
- All Implemented Interfaces:
org.reactivestreams.Subscriber<Message<?>>,Aware,BeanFactoryAware,BeanNameAware,DisposableBean,InitializingBean,ApplicationContextAware,Ordered,org.springframework.integration.context.ComponentSourceAware,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,MessageHandler,reactor.core.CoreSubscriber<Message<?>>
public class SnsMessageHandler
extends org.springframework.integration.handler.AbstractMessageProducingHandler
The
AbstractMessageProducingHandler implementation to send SNS Notifications
(SnsAsyncClient.publish(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 an 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 theevaluationContextto allow bypassing 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().
- Since:
- 4.0
- 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
FieldsFields 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
ConstructorsConstructorDescriptionSnsMessageHandler(software.amazon.awssdk.services.sns.SnsAsyncClient amazonSns) -
Method Summary
Modifier and TypeMethodDescriptionadditionalOnSuccessHeaders(software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response) protected voidhandleMessageInternal(Message<?> message) protected Message<?> handleResponse(Message<?> message, software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response, Throwable cause) protected voidonInit()voidsetBodyExpression(Expression bodyExpression) TheExpressionto produce the SNS notification message.voidsetHeaderMapper(org.springframework.integration.mapping.HeaderMapper<Map<String, software.amazon.awssdk.services.sns.model.MessageAttributeValue>> headerMapper) Specify aHeaderMapperto map outbound headers.voidsetMessageDeduplicationIdExpression(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(Expression messageGroupIdExpression) TheExpressionto determine the message group for messages sent to an SNS FIFO topic from this handler.voidsetSendTimeout(long sendTimeout) voidsetSendTimeoutExpression(Expression sendTimeoutExpression) voidsetSendTimeoutExpressionString(String sendTimeoutExpression) voidsetSubject(String subject) voidsetSubjectExpression(Expression subjectExpression) voidsetTopicArn(String topicArn) voidsetTopicArnExpression(Expression topicArnExpression) voidsetTopicArnResolver(TopicArnResolver topicArnResolver) Provide a customTopicArnResolver; defaults toSnsAsyncTopicArnResolver.protected booleanMethods inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setupMessageProcessor, shouldSplitOutput, updateNotPropagatedHeadersMethods inherited from class org.springframework.integration.handler.AbstractMessageHandler
handleMessage, onComplete, onError, onNext, onSubscribe, setObservationConventionMethods inherited from class org.springframework.integration.handler.MessageHandlerSupport
buildSendTimer, destroy, getIntegrationPatternType, getManagedName, getManagedType, getMetricsCaptor, getObservationRegistry, getOrder, getOverrides, isLoggingEnabled, isObserved, registerMetricsCaptor, registerObservationRegistry, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrackMethods 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, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentDescription, setComponentName, setComponentSource, 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
-
Field Details
-
DEFAULT_SEND_TIMEOUT
protected static final long DEFAULT_SEND_TIMEOUT- See Also:
-
-
Constructor Details
-
SnsMessageHandler
public SnsMessageHandler(software.amazon.awssdk.services.sns.SnsAsyncClient amazonSns)
-
-
Method Details
-
setTopicArn
-
setTopicArnExpression
-
setTopicArnResolver
Provide a customTopicArnResolver; defaults toSnsAsyncTopicArnResolver.- Parameters:
topicArnResolver- theTopicArnResolverto use.
-
setSubject
-
setSubjectExpression
-
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
-
setMessageGroupIdExpression
TheExpressionto determine the message group for messages sent to an SNS FIFO topic from this handler.- Parameters:
messageGroupIdExpression- theExpressionto produce the message-group ID
-
setMessageDeduplicationIdExpression
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
-
setBodyExpression
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.
-
setSendTimeout
public void setSendTimeout(long sendTimeout) - Overrides:
setSendTimeoutin classorg.springframework.integration.handler.AbstractMessageProducingHandler
-
setSendTimeoutExpressionString
-
setSendTimeoutExpression
-
setHeaderMapper
-
getComponentType
- Specified by:
getComponentTypein interfaceorg.springframework.integration.support.context.NamedComponent- Overrides:
getComponentTypein classorg.springframework.integration.handler.MessageHandlerSupport
-
shouldCopyRequestHeaders
protected boolean shouldCopyRequestHeaders()- Overrides:
shouldCopyRequestHeadersin classorg.springframework.integration.handler.AbstractMessageProducingHandler
-
onInit
protected void onInit()- Overrides:
onInitin classorg.springframework.integration.handler.AbstractMessageProducingHandler
-
handleMessageInternal
- Specified by:
handleMessageInternalin classorg.springframework.integration.handler.AbstractMessageHandler
-
handleResponse
-
additionalOnSuccessHeaders
-