假设我使用avro工具为“myschema”的v2生成代码,一条消息出现在用“myschema”的v1编写的队列中。如果我理解正确的话,处理这种情况的最佳方法就是认识到消息是用“myschema”的v1编写的,使用schema注册表获取v1模式,并使用v1反序列化消息。
在这一点上,是否有可能以某种方式将结果对象转换为avro工具为v2生成的代码中相应的字段和对象?
到目前为止,处理消息的唯一方法似乎是生成一个“genericord”,它需要字符串键来访问字段的值。我更喜欢使用生成的v2代码,将任何输入错误转换为编译错误而不是运行时错误,在编码时知道值的数据类型,避免设置一堆枚举来包含字符串键。
1条答案
按热度按时间zi8p0yeb1#
avro用户邮件列表上的scott已回复(https://lists.apache.org/thread.html/r2e77597fd20de1379fdd4287c02fc703a631cd2309f74f33d6a457b8%40%3cuser.avro.apache.org%3e):
下面的代码返回类型t并使用specificdatumreader。
我的错误是错过了比赛
T
在new SpecificDatumReader<T>
,所以它返回了一个GenericRecord
而不是T
.