问题背景:一个项目会由非常多微服务组成,其中部分微服务采用 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 服务的需求,所以我这种方法不太合适。
所以以下是我想请教的问题,希望大佬们不吝赐教!
谢谢大佬们~
1
zhanchong316p 2020-07-19 01:43:34 +08:00
我们用的是 protobuf,然后全是 java 项目,做法是每个单独的服务维护一个 protobuf 的 repo,然后一些公共的放在 proto-base 里,其他的 proto 项目只允许 import base 。在 jenkins 上维护每个 repo 打 jar 包,需要用到的项目自己维护依赖 jar 包,比 submodule 的方式稍微好一点。go 项目咋用就不太清楚咯
|
2
leishi1313 2020-07-19 06:44:30 +08:00 via Android
proto 搭配 monorepo 会比较舒服
|
3
jaynos OP @zhanchong316p #1
每个服务单独维护一个 proto 的 repo,生成的 java 文件也会放在和 proto 文件一个 repo 嘛?我这边因为有部分服务是 go 部分是 java,所以怎么维护 proto 文件是个头疼问题 |
4
jaynos OP @leishi1313 #2
了解了下 mongorepo,涨姿势了。 感觉比较适合都是技术栈的项目,我这边部分服务是采用 go 写的,部分是 java,在一个 repo 里维护的话,感觉不是非常合适,感谢~ |