protobuf 或者 thrift 文件等文件如何在项目中进行管理?
问题背景:一个项目会由非常多微服务组成,其中部分微服务采用 Go 编写,部分采用 Java 编写
目前做法和我的思考:因为一个服务有实现方和调用方,所以 idl 文件肯定是放在单独仓库里的,因为目前改造的服务只涉及到 Go,所以我采用的方法是
将 idl 单独维护在一个 repo 并且提供 Makefile 文件,然后 Server 和 Client 使用 submodule 引入 idl 的 repo,通过外部的 Makefile 执行$(MAKE) -C /path/to/idl GO_OUT_DIR=$(shell pwd)/internal/proto
这样的方式编译到当前项目中。
但是考虑了下,因为还有 Java 调用 Go 服务的需求,所以我这种方法不太合适。
所以以下是我想请教的问题,希望大佬们不吝赐教!
- 对于 idl 来说,需要进行单独 repo 维护嘛?
- 对于 idl 来说,需要一个 service 维护一个 repo 么(或者是一组 idl 维护在一个 repo 里,这样会不会不合适?因为一个服务只需要依赖一小部分的实现,但是引入了所有的 service )?
- idl 生成的文件如何进行维护(其实和 idl 差不多)?
- idl 生成的文件中额外增加文件一起维护(如直接从 zk 里获取服务地址构造完整的 client )?
谢谢大佬们~
----------------------- 以下是精选回复-----------------------
答:我们用的是 protobuf,然后全是 java 项目,做法是每个单独的服务维护一个 protobuf 的 repo,然后一些公共的放在 proto-base 里,其他的 proto 项目只允许 import base 。在 jenkins 上维护每个 repo 打 jar 包,需要用到的项目自己维护依赖 jar 包,比 submodule 的方式稍微好一点。go 项目咋用就不太清楚咯
答:proto 搭配 monorepo 会比较舒服
0条评论