我有一个标准的SNS主题,我设置了“订阅过滤策略”,如下所示:
{
"event": [
"eventName"
]
}
当我使用属性消息通过AWS控制台发布消息时,消息会到达正确的SQS订阅者,因此订阅过滤器工作正常。
现在我正尝试在我的java代码上做同样的事情(Sping Boot )。
我使用的是lib spring-cloud-aws-messaging
,据我所知,它只是AWS JDK的一个 Package 器。
问题是我不知道如何像在AWS控制台上那样设置消息属性。
不管我发送到SNS的JSON格式是什么,属性总是在SNS消息的正文中。我猜有一个特定的方法来设置这些属性。
我找到了com.amazonaws.services.sns.model.MessageAttributeValue
我不确定是否是正确的类,我也不明白如何发布消息和属性,因为方法publish不接受它。
this.amazonSNS.publish(this.snsTopicARN, message, messageAttributes ???);
3条答案
按热度按时间xtfmy6hx1#
根据官方文档,有MessageAttributeValue.Builder,它符合您的需要。
https://javadoc.io/static/software.amazon.awssdk/sns/2.10.37/software/amazon/awssdk/services/sns/model/MessageAttributeValue.Builder.html
vlf7wbxs2#
如果你想使用spring-cloud-aws,你可以这样做:
vu8f3i0k3#
如果您不想使用基于属性的消息过滤,而切换到基于负载的消息过滤,您也可以。您只需将名为
FilterPolicyScope
的订阅属性设置为MessageBody
,而默认值为MessageAttributes
。更多信息:https://aws.amazon.com/blogs/compute/introducing-payload-based-message-filtering-for-amazon-sns/