在我的公司中,我们有一个由微服务组织的系统,每个服务都有专用的git存储库。我们想介绍gRPC,我们想知道如何共享protobuf文件并为我们的各种语言构建库。根据我们收集的一些示例,我们最终决定在内部存放所有protobuf的单个存储库,这似乎是最常用的存储方式,并且似乎更易于维护和使用。
我想知道您是否有一些例子? 您是否有一些相反的例子,说明公司做相反的事情,即以分布式方式托管protobuf?
答案 0 :(得分:3)
我们的每个微服务都有其自己的API(protobuf或几个protobuf文件)。对于每个API,我们都有单独的存储库。此外,我们还有CI作业,它将原型构建到jar中(不仅适用于Java,而且适用于另一种语言),并将其发布到我们的中央存储库中。比您只需将依赖项添加到所需的API。
例如,我们有微服务A
,我们还有存储库a-api
(仅包含原型文件),该存储库通过作业在jar(以及其他语言)中com.api.a-service.<version>
答案 1 :(得分:1)
我们有一个用于原型文件(称为schema
)的独特存储库,以及每个微服务的多个存储库。同样,我们从不存储生成的代码。服务器和客户端文件是由protoc
从头开始在每次CI构建时生成的。
实际上,这种方法可以很好地满足我们的需求。但是有两个潜在的陷阱:
schema
与微服务存储库之间的不一致。提交到两个不同的git repos并不是原子的,因此,在schema
更新时,schema
总是有一段时间更新,而微服务的repo还没有。 Go
,则可能会转移到Go 1.11中引入的Go模块。我们尚未对此进行全面研究。