gpt4 book ai didi

go - 较旧的服务传输较新版本的 Protocol Buffer 3 消息

转载 作者:IT王子 更新时间:2023-10-29 02:23:04 25 4
gpt4 key购买 nike

比如说,我有一个 Protocol Buffer 消息(在 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

最佳答案

您可以添加一个Any字段以备将来扩展需要:

https://developers.google.com/protocol-buffers/docs/proto3#any

我自己没有用过,但如果我理解正确的话,即使是无法识别的任何字段值在消息被解码和重新编码时应该保留。

关于go - 较旧的服务传输较新版本的 Protocol Buffer 3 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com