繁体   English   中英

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

[英]How do I set AWS SNS message attribute values with spring-cloud-aws-messaging or aws-java-sdk?

我有一个标准的 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

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

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

根据官方文档,有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,你可以这样做:

SnsMessage snsMessage = SnsMessage.builder()
    .message("test")
    .build();

Map<String, Object> headers = new HashMap<>();
headers.put("event", "eventName");

this.notificationMessagingTemplate.convertAndSend(topicName, snsMessage, headers);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM