针对嵌套记录 AVRO 架构的 GCP Pub/Sub 消息验证失败

问题描述 投票:0回答:1

我有一个相当复杂的 AVRO 架构,它通过了验证,但发送给它的消息不知何故与我定义的 AVRO 架构不兼容。

从那时起,我尝试缩小架构范围以了解为什么会发生这种情况,并且似乎嵌套记录 AVRO 架构在 Pub/Sub 中效果不太好。

例如,考虑以下 AVRO 架构:

{
 "type" : "record",
 "name" : "Avro",
 "fields" : [
   {
     "name" : "foo",
     "type" : {
        "name": "foo_1",
        "type": "int"
     }
   }
 ]
}

和示例消息:

{
  "foo": {
    "foo_1": 42
  }
}

上面的示例架构通过了 Pub/Sub 中的架构验证,但是当我测试上面的消息时,它失败了。

我发现类似的帖子here,但它并没有多大帮助。

也许 Pub/Sub 存在嵌套记录问题?

非常感谢。

avro google-cloud-pubsub
1个回答
0
投票

您提供的架构未指定嵌套记录。请注意,字段内没有额外的

"record"
类型。您想要匹配您指定的消息的模式是:

{
    "type": "record",
    "name": "Avro",
    "fields": [
        {
            "name": "foo",
            "type": {
                "type": "record",
                "name": "NestedRecord",
                "fields": [
                    {
                        "name": "foo_1",
                        "type": "int"
                    }
                ]
            }
        }
    ]
}

您指定的架构有一个记录,其中包含一个名为

int
的单个
foo
字段。嵌套的
"name"
规范基本上被忽略。这是一条针对您提供的架构有效的消息:

{
  "foo": 42
}
© www.soinside.com 2019 - 2024. All rights reserved.