【问题标题】:How do I set AWS SNS message attribute values with spring-cloud-aws-messaging or aws-java-sdk?如何使用 spring-cloud-aws-messaging 或 aws-java-sdk 设置 AWS SNS 消息属性值?
【发布时间】:2022-03-04 01:41:51
【问题描述】:

我有一个标准的 SNS 主题,并且我设置了这样的“订阅过滤策略”:

{
  "event": [
    "eventName"
  ]
}

当我使用属性消息通过 AWS 控制台发布消息时,该消息会发送到正确的 SQS 订阅者。所以订阅过滤器工作得很好。

现在我正在尝试对我的 java 代码(Spring Boot)做同样的事情。

我正在使用 lib spring-cloud-aws-messaging,据我了解它只是 AWS JDK 的包装器。

问题是我不知道如何像在 AWS 控制台上那样设置消息属性。

我发送给 SNS 的 JSON 格式无关紧要,属性始终位于 SNS 消息的正文中。我想有一个特定的方法来设置这些属性。

我找到com.amazonaws.services.sns.model.MessageAttributeValue

我不确定是否是正确的类,我也无法理解如何发布消息和属性,因为方法 publish 不接受它。

this.amazonSNS.publish(this.snsTopicARN, message, messageAttributes ???);

【问题讨论】:

    标签: java amazon-web-services spring-cloud amazon-sns spring-cloud-aws


    【解决方案1】:

    根据官方文档,有MessageAttributeValue.Builder,符合你的需要。

    https://javadoc.io/static/software.amazon.awssdk/sns/2.10.37/software/amazon/awssdk/services/sns/model/MessageAttributeValue.Builder.html

    Map<String, MessageAttributeValue> attributes = new HashMap<>();
    
    attributes.put("event", MessageAttributeValue.builder()
            .dataType("String")
            .stringValue("eventName")
            .build());
    
    PublishRequest request = PublishRequest.builder()
            .topicArn("yourTopic")
            .message("YourMessageBody")
            .messageAttributes(attributes)
            .build();
    
    yourDefinedSnsClient.publish(request);
    

    【讨论】:

    • 我从 spring-cloud-aws 更改为 aws-java-sdk 并按照你说的做了。它工作正常。 tks
    【解决方案2】:

    如果你想使用 spring-cloud-aws,你可以这样做:

    SnsMessage snsMessage = SnsMessage.builder()
        .message("test")
        .build();
    
    Map<String, Object> headers = new HashMap<>();
    headers.put("event", "eventName");
    
    this.notificationMessagingTemplate.convertAndSend(topicName, snsMessage, headers);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多