如何使用 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 引导)执行相同的操作。
我正在使用库 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,符合你的需要
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);
我有一个标准的 SNS 主题,我设置了这样的“订阅过滤策略”:
{
"event": [
"eventName"
]
}
当我使用属性消息通过 AWS 控制台发布消息时,消息会发送到正确的 SQS 订阅者。所以订阅过滤器工作得很好。
现在我正尝试对我的 java 代码(Spring 引导)执行相同的操作。
我正在使用库 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,符合你的需要
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);