SNS 是否允许根据 String.array 中是否存在多个值进行过滤

Does SNS allow filtering based on presence of multiple values in String.array

我想使用 SNS 发布通知,我希望订阅者能够过滤多个消息属性。此类消息属性之一将是 String.Array。例如,通知可以有两个属性 fruit_found 和 all_fruits_found.

"fruit_found": ["Apple"],"all_fruits_found":["Mango","Apple","Banana"]

在某些用例中,订阅者可能需要知道是否同时找到了 Mango 和 Apple,然后才使用通知,否则将其丢弃。是否可以在 SNS 中这样做?

您无法单独使用 SNS 实现此目的,您可能需要一个 lambda 函数来接收 SNS 消息并根据字符串将其分离并再次发布到主题。

您可能需要创建三个 SNS 主题:

  1. 用于 lambda 处理
  2. 对于 Mango 订阅者
  3. Apple 订阅者

所以我不得不与 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 个消息属性。因此,如果您在该边界内,则上述解决方案可以正常工作。不然就得参考阿里的回答了