![](/img/trans.png)
[英]How to use Firebase Cloud Messaging(FCM) topic with 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,可以满足你的需求。
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.