SNS Topic复杂JSON消息订阅过滤规则不生效问题排查求助
问题根因
你编写的过滤器不生效核心是两个错误:
- SNS订阅过滤器默认匹配消息JSON的顶级字段,但
operation/tableName是嵌套在transaction对象下的属性,columnName/hasChanged/newValue是columns数组内的子属性,平级写规则无法命中对应字段。 - 未指定过滤器作用范围,SNS默认过滤「消息属性」,而你需要匹配的是「消息正文」的内容。
正确解决方案
步骤1:使用正确的嵌套路径+数组匹配语法编写过滤规则
SNS支持用.访问嵌套对象属性,用[*]匹配数组内的任意元素,规则如下:
{ "transaction.operation": ["UPDATE"], "transaction.tableName": ["Customer"], "columns[*].columnName": ["IsActive"], "columns[*].hasChanged": [true], "columns[*].newValue": ["0"] }
规则逻辑:只要消息同时满足「Customer表的UPDATE操作、columns数组中存在IsActive字段变更为0的记录」就会被筛选出来,完全匹配你的业务需求。
步骤2:指定过滤器作用范围为消息正文
- 控制台操作:创建订阅过滤器时,在「过滤器范围」的下拉选项中选择「消息正文」,不要选默认的「消息属性」。
- CLI/SDK操作:创建过滤器时添加参数
FilterPolicyScope = MessageBody。
校验注意事项
注意数据类型完全匹配:消息中newValue是字符串类型的"0",规则里不能写数字0;hasChanged是布尔值true,规则里不能写字符串"true",类型不匹配会导致过滤失败。
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

