C#Confluent.Apache.Avro-在架构中具有枚举的GenericRecord.Add(schema)

时间:2020-08-05 21:45:29

标签: c# apache-kafka avro kafka-producer-api confluent-schema-registry

我想使用avro模式将消息发布到kafka,并且在已注册模式中具有枚举类型。

模式:

var s = (RecordSchema)RecordSchema.Parse(
         @"{
              ""type"": ""record"",
              ""name"": ""xyz"",
              ""namespace"": ""abc.xyz.com"",
              ""fields"": [
                {
                  ""name"": ""firstname"",
                  ""type"": ""string""
                },
                {
                  ""name"": ""language"",
                  ""type"": {
                    ""type"": ""enum"",
                    ""name"": ""Language"",
                    ""symbols"": [
                      ""English"", ""Spanish""
                    ]
                  }
                }
          }"
     ); 

    var record = new GenericRecord(s);
    var language = (EnumSchema)EnumSchema.Parse(@"{""type"": ""enum"",""name"": ""Language"",""symbols"": [""English"", ""Spanish""]}");

record.Add("firstname", "xyz");
record.Add("language",  new GenericEnum(language, "English"));

但是当我尝试发布此消息时,它给了我例外。

    await producer
                    .ProduceAsync(topicName, new Message<string, GenericRecord> { Key = "123", Value = record })
.ContinueWith(task => Console.WriteLine(
            task.IsFaulted
          ? $"error producing message: {task.Exception.Message}"
          : $"produced to: {task.Result.TopicPartitionOffset}"));

例外:

 Confluent.Kafka.ProduceException`2: 'Local: Value serialization error'
Inner Exception:
AvroException: GenericEnum required to write against enum schema but found Avro.Generic.GenericEnum in field language

0 个答案:

没有答案