gRPC / Protobuf接口版本控制

时间:2016-11-10 03:40:55

标签: protocol-buffers versioning grpc proto3

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

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

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

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

  

AppName v.version [使用interface v.version]

的DATETIME连接

3 个答案:

答案 0 :(得分:1)

在即将推出的gRPC版本中,将会有一项名为Server Reflection的新功能。这将允许客户端向服务器询问描述正在使用的proto文件的描述符。客户端将知道服务器正在运行的内容,而不是服务器知道客户端正在运行的版本。如果服务器描述符与客户端已有的服务器描述符匹配,则它将知道它们在相同版本上发言。

这将在版本1.1中发布。

请注意,Protobufs的设计是为了让您不要必须这样做!如果正确设置了proto,则新旧版本的客户端和服务器应该一起工作。

答案 1 :(得分:-1)

如果使用协议缓冲区版本2,则可以使用默认值来实现此目的。协议缓冲区3已删除对默认值的支持,因此此答案在那里不起作用。

在定义界面的.proto文件中,有类似的内容:

for i in mbr[i]:
    variable = "mbr[i]_file.dat"
    ...

这样任何客户端都会自动包含从.proto。

中获取的版本号

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

答案 2 :(得分:-1)

执行此操作的一种方法是添加custom option并在.proto文件的顶部设置该选项,如下所示:

option (my_app.version) = 3;

然后,在每种语言中,您都可以检查该选项的值,并将其指定为您的版本号。