说,我有一个
形式的协议缓冲消息(在proto3中)message A {
int32 foo = 1;
}
我正在运行使用这些消息写入Go的服务器X,Y和Z,并使用gRPC传递它们,以便X与Y和Y对话与Z对话,即X和Z通过Y进行通话。
Alice设计了一个很酷的新功能,需要在消息A中添加一个新字段bar,并更新服务器X和Z.
message A {
int32 foo = 1;
int32 bar = 2;
}
但是,部署版本的服务器Y无法识别此新字段,重新部署服务器Y以实现此目标在大型系统中很快就会变得非常困难。
在之前的生活中,我们使用了proto2,所有这一切都运行良好,因为它会保留未被识别的字段。但是,Google现在建议我们将proto3与gRPC一起使用,根据我的理解,至少在Go中不再支持保留无法识别的字段。
使用proto3解决此问题的推荐方法是什么?
更新
关于这个问题有一个开放的github问题
https://github.com/google/protobuf/issues/272
答案 0 :(得分:0)
您可以为将来的扩展需求添加任意字段:
https://developers.google.com/protocol-buffers/docs/proto3#any
我自己没有使用它,但如果我理解正确,甚至无法识别任何字段值应该在消息被解码和重新编码时保留。