gRPC多项目的proto管理问题

gRPC在我们的项目中有大量的应用,随之而来的就有一个问题关于gRPC的proto和client代码管理问题。由于提供gRPC服务的通常都是各个系统,目前项目都是使用自己的vendor进行依赖管理。同时,为了方便其他项目的调用,该服务的client端代码也通常是和项目一起进行开发的,提供给第三方调用。

这样就出现了当使用相同库时,外部vendor会与调用client的项目vendor目录冲突,针对相同第三方包引用时,会出现因为路径不同,导致识别非相同定义的问题。

我目前想到的方法有两种:

  • 将proto/server/client部分代码拆分出来,单独做仓库。这样会有很多仓库出现。
  • 项目仓库中不在内置vendor,但是这样对CI系统并不友好,尤其是使用了/x/net等之类的包。

请教一下各位在实践时都是如何操作的呢?各有什么利弊?

已邀请:

cowkeys

赞同来自:

我们一般这样做 因为go的代码 都比较分散。把proto的包单独放在一个库,这样可以让其他服务都使用最新的proto协议, go代码每次直接编译出二进制文件丢到生产上就行了,vendor里面就只放 这个项目独有的或者修改过的包

philc - https://github.com/philchia

赞同来自:

vendor 作为一个库放在项目平行的目录下,所有项目共享这个 vendor

huashuo

赞同来自:

你好!我遇到和你同样的问题,请问你现在有什么更好的思路码

stirlingx - https://github.com/liyue201

赞同来自:

用vendor吧,proto是server的一个包,client的vendor中放这个包。

liqiang

赞同来自:

假设项目 A 提供 Client,项目 B 使用 A-Client,那么当使用的时候 B 将 Client-A 的代码放到 B 的 vendor 目录下,不就不会产生依赖问题了?

要回复问题请先登录注册