Bru*_* DZ 2 java amazon-web-services amazon-sns spring-cloud spring-cloud-aws
我有一个标准的 SNS 主题,并且我\xc2\xb4ve 设置了“订阅过滤策略”,如下所示:
\n{\n "event": [\n "eventName"\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n当我使用属性消息通过 AWS 控制台发布消息时,该消息将发送至正确的 SQS 订阅者。所以订阅过滤器工作得很好。
\n现在我正在尝试对我的 java 代码(Spring Boot)执行相同的操作。
\n我正在使用该库spring-cloud-aws-messaging,据我所知它只是 AWS JDK 的包装器。
问题是我不知道如何设置消息属性,就像我在 AWS 控制台上所做的那样。
\n\xc2\xb4 与我发送到 SNS 的 JSON 格式无关,属性始终位于 SNS 消息的正文中。我想有一个特定的方法来设置这些属性。
\n我发现com.amazonaws.services.sns.model.MessageAttributeValue
我不确定是否是正确的类,而且我无法理解如何发布消息和属性,因为发布方法不接受它。
\nthis.amazonSNS.publish(this.snsTopicARN, message, messageAttributes ???);\nRun Code Online (Sandbox Code Playgroud)\n
根据官方文档,有MessageAttributeValue.Builder,它符合您的需要。
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)