我是gRPC
和Protocol Buffers
的新手,但我确实想为gRPC
的开发设置方便的环境。我使用具有多仓库风格的微服务(基本上是SOA)架构(请不要问为什么-我不想讨论我的选择)。因此,我遇到了一些有关gRPC
的项目结构的问题,这就是我现在所拥有的:
Schema
存储库的Protos
。只有.proto
个文件,build script
(用于编译所有原型文件并将结果推送到自己的存储库的简单shell脚本),.protolangs
个文件(以便build script
将了解语言必须进行编译)和CI configuration
文件.proto
文件(每种语言都有内部文件夹)的每项服务的自己的存储库。恕我直言:最好只包含几个submodules
而不是一个,而每个服务中都包含所有已编译的.proto
文件git submodules
仓库的已编译.proto
文件(golang,nodejs等)与彼此通信的服务那我的问题是什么?
在Protos
存储库中,以下几种文件夹(用于带有.proto
文件的每个服务):
$ tree
.
├── README.md
├── .gitignore
├── .gitlab-ci.yml
├── build.sh
├── api
│ ├── .protolangs
│ ├── api.proto
│ └── common.proto
└── user
├── .protolangs
├── common.proto
├── user.info.proto
└── user.proto
我想分离.proto
个文件,以便对服务的每个内部逻辑(例如:信息,条目等)拥有common.proto
和.proto
。使用nodejs
,一切都很好-只需编译整个文件夹即可。但是当我为golang
进行编译时-无法通过相对路径导入。现在,我想写一个简单的工具,它将收集所有.proto
文件,只生成一个然后进行编译。但是有没有更好的方法来解决它?
PS:我使用gitlab,因此subgroups在某些git提供程序中可能不可用。
P.P.S:我将非常感谢所有改进此结构的建议
P.P.P.S:我从Namely
阅读了this条文章,我很喜欢。所以我的结构可能与上一篇文章的结构相似