Redpanda Connect无法反序列化SQS转义消息致DynamoDB字段为空
解决Redpanda Connect解析SQS转义JSON为空的问题
问题核心是你收到的SQS消息是SNS通知格式,其中Message字段是被反斜杠转义的JSON字符串,当前配置直接从根节点读取Info等字段,但这些字段实际嵌套在Message的转义内容里,自然取不到值,导致写入DynamoDB全是空。
解决方法是先把Message字段里的转义JSON解析成正常的JSON对象,再从里面提取数据,修改后的完整配置如下:
input: aws_sqs: url: ${SQS_QUEUE_URL} region: eu-west-1 pipeline: processors: - log: level: DEBUG message: "Raw input: ${!content()}" # 关键:解析Message字段的转义字符串为JSON对象 - json_parser: path: Message parse_mode: loose # 兼容非严格JSON格式(比如示例里的前导零数字) - log: level: INFO fields_mapping: | # 路径改为this.Message.Info,因为Message已被解析为对象 root.name = this.Message.Info.Name root.phone = this.Message.Info.PhoneNumber root.branchName = this.Message.Info.BrandName root.timeZone = this.Message.Info.TimeZone root.street = this.Message.Info.Address.FirstLine root.postalCode = this.Message.Info.Address.Postcode root.city = this.Message.Info.Address.City root.latitude = this.Message.Info.Address.Location.Lat root.longitude = this.Message.Info.Address.Location.Lng message: "Processing input" # 可选:移除不需要的SNS元数据字段,减少冗余 - remove_fields: fields: [Type, MessageId, TopicArn, Subject] output: aws_dynamodb: table: ${DYNAMODB_TABLE} batching: count: 10 period: 1s json_map_columns: "": . region: eu-west-1 logger: level: DEBUG
关键修改说明
json_parser处理器:指定path: Message后,会将该字段的转义字符串解析为嵌套JSON对象,让后续处理器能正常访问里面的业务数据。parse_mode: loose用于兼容示例里的前导零数字(非严格JSON规范),如果你的消息格式完全符合JSON标准,可改为strict模式。- 字段映射路径调整:所有从
this.Info开头的路径必须改为this.Message.Info,因为解析后Message已从字符串变为包含业务数据的对象。 - 可选的
remove_fields:如果不需要SNS通知的顶层元数据(如Type、MessageId等),可以用这个处理器删掉,避免写入DynamoDB时存储冗余数据。
内容的提问来源于stack exchange,提问作者Berkin
相关产品推荐
相关产品推荐

