gRPC/Protobuf接口版本控制

Pau*_*est 11 versioning protocol-buffers grpc proto3

假设我们使用gRCP/Protobuf来连接许多应用程序.这些应用程序是以自己的速度在自己的团队中开发和发布的.随着时间的推移,将在定义的界面上使用不同版本的相同应用程序的不同版本(例如,在用户PC上安装的桌面应用程序).

虽然Protobuf旨在允许向后兼容,但有没有办法知道哪个版本的接口在不同的点运行?

最简单的实现是使接口版本等于app版本.但是,由于使用了许多语言,在所有语言中实现应用程序版本并非易事.

那么版本界面如何让服务器知道客户端版本?我认为服务器应该能够登录

来自AppName v.version的DATETIME连接[using interface v.version]

Car*_*elo 5

在即将推出的 gRPC 版本中,将有一个称为服务器反射的新功能。这将允许客户端向服务器询问描述正在使用的 proto 文件的描述符。服务器不知道客户端正在运行的版本,而是客户端将知道服务器正在运行什么。如果服务器描述符与客户端已经拥有的描述符匹配,那么它就会知道它们在使用相同的版本。

这将在版本中发布1.1

请注意,Protobuf 的设计使您不必 这样做!如果您正确设置了 proto,新旧版本的客户端和服务器应该可以协同工作。


jpa*_*jpa -1

如果您使用的是协议缓冲区版本 2,则可以使用默认值来实现这一点。Protocol buffers 3 已经删除了对默认值的支持,因此这个答案在那里不起作用。

在定义接口的 .proto 文件中,包含以下内容:

message MyLoginMessage
{
    ... normal login fields ...

    // Increment this number when you make new releases
    // of this .proto.
    optional int32 protocol_version [default=55];
}
Run Code Online (Sandbox Code Playgroud)

这样任何客户端都会自动包含从 .proto 中获取的版本号。

编辑:啊,刚刚注意到 proto3 标签..所以我想这个答案对你来说毕竟没有用。