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 PublishRequest it is used as is for publishing.
  • If the bodyExpression is specified, it is used to be evaluated against requestMessage.
  • If the evaluation result (or payload) is instance of SnsBodyBuilder, the SNS Message is built from there and the messageStructure of the PublishRequest is set to json. For the convenience the package org.springframework.integration.aws.support is imported to the evaluationContext to allow bypassing it for the SnsBodyBuilder from the bodyExpression definition. For example:
     
     String bodyExpression = "SnsBodyBuilder.withDefault(payload).forProtocols(payload.substring(0, 140), 'sms')";
     snsMessageHandler.setBodyExpression(spelExpressionParser.parseExpression(bodyExpression));
     
     
  • Otherwise the payload (or the bodyExpression evaluation result) is converted to the String using IntegrationObjectSupport.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

    Fields
    Modifier and Type
    Field
    Description
    protected static final long
     

    Fields inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler

    messagingTemplate

    Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport

    EXPRESSION_PARSER, logger

    Fields inherited from interface org.springframework.integration.support.management.IntegrationManagement

    METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME

    Fields inherited from interface org.springframework.core.Ordered

    HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
  • Constructor Summary

    Constructors
    Constructor
    Description
    SnsMessageHandler(software.amazon.awssdk.services.sns.SnsAsyncClient amazonSns)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Map<String,?>
    additionalOnSuccessHeaders(software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response)
     
     
    protected void
     
    protected Message<?>
    handleResponse(Message<?> message, software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response, Throwable cause)
     
    protected void
     
    void
    setBodyExpression(Expression bodyExpression)
    The Expression to produce the SNS notification message.
    void
    setHeaderMapper(org.springframework.integration.mapping.HeaderMapper<Map<String,software.amazon.awssdk.services.sns.model.MessageAttributeValue>> headerMapper)
    Specify a HeaderMapper to map outbound headers.
    void
    setMessageDeduplicationIdExpression(Expression messageDeduplicationIdExpression)
    The Expression to determine the deduplication ID for this message.
    void
    setMessageGroupId(String messageGroupId)
    A fixed message-group ID to be set for messages sent to an SNS FIFO topic from this handler.
    void
    setMessageGroupIdExpression(Expression messageGroupIdExpression)
    The Expression to determine the message group for messages sent to an SNS FIFO topic from this handler.
    void
    setSendTimeout(long sendTimeout)
     
    void
    setSendTimeoutExpression(Expression sendTimeoutExpression)
     
    void
    setSendTimeoutExpressionString(String sendTimeoutExpression)
     
    void
    setSubject(String subject)
     
    void
    setSubjectExpression(Expression subjectExpression)
     
    void
    setTopicArn(String topicArn)
     
    void
    setTopicArnExpression(Expression topicArnExpression)
     
    void
    Provide a custom TopicArnResolver; defaults to SnsAsyncTopicArnResolver.
    protected boolean
     

    Methods 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, updateNotPropagatedHeaders

    Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler

    handleMessage, onComplete, onError, onNext, onSubscribe, setObservationConvention

    Methods 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, shouldTrack

    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, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentDescription, setComponentName, setComponentSource, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface reactor.core.CoreSubscriber

    currentContext

    Methods inherited from interface org.springframework.integration.support.management.IntegrationManagement

    getThisAs

    Methods 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

      public void setTopicArn(String topicArn)
    • setTopicArnExpression

      public void setTopicArnExpression(Expression topicArnExpression)
    • setTopicArnResolver

      public void setTopicArnResolver(TopicArnResolver topicArnResolver)
      Provide a custom TopicArnResolver; defaults to SnsAsyncTopicArnResolver.
      Parameters:
      topicArnResolver - the TopicArnResolver to use.
    • setSubject

      public void setSubject(String subject)
    • setSubjectExpression

      public void setSubjectExpression(Expression subjectExpression)
    • setMessageGroupId

      public void setMessageGroupId(String messageGroupId)
      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

      public void setMessageGroupIdExpression(Expression messageGroupIdExpression)
      The Expression to determine the message group for messages sent to an SNS FIFO topic from this handler.
      Parameters:
      messageGroupIdExpression - the Expression to produce the message-group ID
    • setMessageDeduplicationIdExpression

      public void setMessageDeduplicationIdExpression(Expression messageDeduplicationIdExpression)
      The Expression to 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 a PublishRequest payload of the request Message, unless content-based deduplication is enabled on the topic.
      Parameters:
      messageDeduplicationIdExpression - the Expression to produce the message deduplication ID
    • setBodyExpression

      public void setBodyExpression(Expression bodyExpression)
      The Expression to produce the SNS notification message. If it evaluates to the SnsBodyBuilder the messageStructure of the PublishRequest is set to json. Otherwise, the IntegrationObjectSupport.getConversionService() is used to convert the evaluation result to the String without setting the messageStructure.
      Parameters:
      bodyExpression - the Expression to produce the SNS notification message.
    • setSendTimeout

      public void setSendTimeout(long sendTimeout)
      Overrides:
      setSendTimeout in class org.springframework.integration.handler.AbstractMessageProducingHandler
    • setSendTimeoutExpressionString

      public void setSendTimeoutExpressionString(String sendTimeoutExpression)
    • setSendTimeoutExpression

      public void setSendTimeoutExpression(Expression sendTimeoutExpression)
    • setHeaderMapper

      public void setHeaderMapper(org.springframework.integration.mapping.HeaderMapper<Map<String,software.amazon.awssdk.services.sns.model.MessageAttributeValue>> headerMapper)
      Specify a HeaderMapper to map outbound headers.
      Parameters:
      headerMapper - the HeaderMapper to map outbound headers.
    • getComponentType

      public String getComponentType()
      Specified by:
      getComponentType in interface org.springframework.integration.support.context.NamedComponent
      Overrides:
      getComponentType in class org.springframework.integration.handler.MessageHandlerSupport
    • shouldCopyRequestHeaders

      protected boolean shouldCopyRequestHeaders()
      Overrides:
      shouldCopyRequestHeaders in class org.springframework.integration.handler.AbstractMessageProducingHandler
    • onInit

      protected void onInit()
      Overrides:
      onInit in class org.springframework.integration.handler.AbstractMessageProducingHandler
    • handleMessageInternal

      protected void handleMessageInternal(Message<?> message)
      Specified by:
      handleMessageInternal in class org.springframework.integration.handler.AbstractMessageHandler
    • handleResponse

      protected Message<?> handleResponse(Message<?> message, software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response, Throwable cause)
    • additionalOnSuccessHeaders

      protected Map<String,?> additionalOnSuccessHeaders(software.amazon.awssdk.services.sns.model.PublishRequest request, software.amazon.awssdk.services.sns.model.PublishResponse response)