我正在尝试使用简单的过滤策略创建SNS主题的订阅者,经过一些调试,我发现订阅者上最简单的可能设置仍然不起作用,尽管我按照官方文档这里做了所有事情。我终于做了一个非常简单的实验,这就是我所做的:
我创建一个SNS主题并设置2个SQS订阅者来订阅它,一个没有过滤器,另一个有一个简单的过滤策略
{"SensorName":["test"]}
然后,我通过将“SensorName”属性设置为“test”,直接通过 SNS 控制台发布了以下消息,这是收到的消息内容:
{
"Type" : "Notification",
"MessageId" : "6d39fd3d-8792-55d9-b45d-a39230423be9",
"TopicArn" : "arn:aws:sns:us-east-1:162092913718:test_filter",
"Subject" : "11",
"Message" : "1111111aa",
"Timestamp" : "2024-05-04T04:12:00.004Z",
"SignatureVersion" : "1",
"Signature" : "PQ5EPMc+zVcTLecOzwnCCrss7dWDX+9yuccLhvfsnX56gaThpeuxyQfWkTDXuzfcIk5BQHqOmHq+3Fjrn1wJB17FI3gozVlYVd4PM0dgHoivmfcY6724/zufhtZDvbw1b8PE6x5rXEg3D3R6dCdUWdf0Fky5twR1Zwnegw3KMsPPSPWrqyLjj7BDvZOUaLpoq6oeUDmFPkOIt2hV9Kn1Tdgyn3i3ifJvpt09bEnrwFen61+vDuiuEGeCi7uqKG4ggML2QX12dtyEzU7onfJrYj+7Ha6FAS87TcZPm9Qwn1gqcgbuts2IILHyfQEkajX4ZUGAnAGUfWAUOO882GW9jw==",
"SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-60eadc530605d63b8e62a523676ef735.pem",
"UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:162092913718:test_filter:4739bfc7-ce1f-4426-be50-6e1573fe9e2c",
"MessageAttributes" : {
"SensorName" : {"Type":"String","Value":"test"}
}
}
没有过滤器的SQS收到了它(上面是收到的内容),有过滤器的SQS没有收到,这不应该是这种情况,而且我在这么简单的例子中找不到问题所在?我一定遗漏了一些重要的东西。有人可以帮忙吗?
您需要在 Amazon SNS 主题中的 SQS 订阅上激活 启用原始消息传送。
您并不明显需要这样做,也没有任何文档明确说明您需要这样做,但之前在 2017 年曾在这里进行过探索:如何在 SNS 订阅中添加 SQS 消息属性?
我刚刚再次测试了它(2024 年),并且可以确认订阅过滤器仅在订阅上启用原始消息传递时才能正常工作。
有趣的是,应用订阅过滤策略 - Amazon Simple Notification Service 文档确实包含激活原始消息传递的说明,但实际上并没有说明这是必需的。不过好像是必须的。