我有一个使用此过滤器的SNS订阅(SQS)过滤器:
{“ source”:[{“ not-but”:“ SOME_STRING”}]}
这项工作正常,除了有时我有去往SNS的消息没有被称为source的任何消息属性,并且在使用过滤器之前,没有过滤器的预订已将其接收。
因此,总而言之,我想找到一种方法,让我的过滤器在不具有此“源”属性的情况下接收消息,或者如果它具有此属性,则应为除SOME_STRING之外的任何内容。
谢谢!
最佳答案
您的要求是在以下情况下过滤并传递消息:
来源属性缺失
source属性存在,并且应该是任何东西-除了SOME_STRING。
Amazon SNS订阅策略在以下情况下接受消息。
1)过滤策略中的每个属性名称都与分配给消息的属性名称匹配。
2)对于每个匹配的属性名称,之间至少存在一个匹配项
下列:
->过滤策略中属性名称的值
->消息属性
如您在给定的documentation中的SNS订阅过滤器策略中所见,任何不包含过滤属性的消息,或者如果该属性值不符合该策略,则该消息将被拒绝。
根据您的示例,您不能过滤和传递不包含“源”属性的消息。但是您可以过滤source属性是否存在,并且应该为除SOME_STRING之外的任何其他属性。
解决方法。
假设您有权访问消息生成源,那么在将其推送到SNS之前,请确保每个消息都包含属性“ source”。然后,您可以轻松地过滤掉是否存在任何内容-除了SOME_STRING。