如何使用 spring-cloud-aws-messaging 或 aws-java-sdk 设置 AWS SNS 消息属性值?

Bru*_* DZ 2 java amazon-web-services amazon-sns spring-cloud spring-cloud-aws

我有一个标准的 SNS 主题,并且我\xc2\xb4ve 设置了“订阅过滤策略”,如下所示:

\n
{\n  "event": [\n    "eventName"\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

现在我正在尝试对我的 java 代码(Spring Boot)执行相同的操作。

\n

我正在使用该库spring-cloud-aws-messaging,据我所知它只是 AWS JDK 的包装器。

\n

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

\n

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

\n

我发现com.amazonaws.services.sns.model.MessageAttributeValue

\n

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

\n
this.amazonSNS.publish(this.snsTopicARN, message, messageAttributes ???);\n
Run Code Online (Sandbox Code Playgroud)\n

Sus*_*afa 8

根据官方文档,有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);
Run Code Online (Sandbox Code Playgroud)

  • 我从 spring-cloud-aws 更改为 aws-java-sdk 并按照您所说的操作。效果很好。tks (3认同)