我想使用 SNS 发布通知,并且我希望订阅者能够过滤多个消息属性。此类消息属性之一将是 String.Array。例如,通知可以有两个属性fruit_found 和all_fruits_found。
"fruit_found": ["Apple"],"all_fruits_found":["Mango","Apple","Banana"]
在某些用例中,订阅者可能需要知道是否同时找到了 Mango 和 Apple,然后才使用通知,否则将其删除。在 SNS 中可以这样做吗?
我想使用 SNS 发布通知,并且我希望订阅者能够过滤多个消息属性。此类消息属性之一将是 String.Array。例如,通知可以有两个属性fruit_found 和all_fruits_found。
"fruit_found": ["Apple"],"all_fruits_found":["Mango","Apple","Banana"]
在某些用例中,订阅者可能需要知道是否同时找到了 Mango 和 Apple,然后才使用通知,否则将其删除。在 SNS 中可以这样做吗?
所以我不得不与 SNS 客户支持团队交谈,发现他们在 String.array 消息属性中没有 AND 操作。
我发现的一种解决方法是为您要提供的过滤器数量复制相同的消息属性。对于问题中的消息,它应该具有如下结构:
"fruit_found": ["Apple"],
"all_fruits_found_filter_1":["Mango","Apple","Banana"],
"all_fruits_found_filter_2":["Mango","Apple","Banana"]
为同时找到 Mango 和 Apple 时定义的过滤策略是:
"all_fruits_found_filter_1": ["Mango"] //and
"all_fruits_found_filter_2": ["Apple"]
但是,每条 SNS 消息最多有 10 个消息属性。因此,如果您在该范围内,则上述解决方案可以正常工作。否则你将不得不参考阿里的答案。
您无法单独使用 SNS 来实现这一点,您可能需要一个 lambda 函数来接收 SNS 消息并根据字符串将其分离并再次发布到主题。
您可能需要创建三个 SNS 主题: