Я новичок в мире gRPC
и Protocol Buffers
, но я действительно хочу настроить удобную среду для разработки с gRPC
.Я использую архитектуру микросервисов (в основном SOA) со стилем мульти-репо (пожалуйста, не спрашивайте почему - я не хочу обсуждать свой выбор).Итак, у меня возникли некоторые вопросы о структуре проекта с gRPC
, вот что у меня сейчас:
- Подгруппа
Schema
с репозиторием Protos
.Есть только файлы .proto
, build script
(простой сценарий оболочки, который компилирует все файлы прото и передает результат в свои собственные репозитории), файл .protolangs
(чтобы build script
понимал, какие языки должны быть скомпилированы) и CI configuration
file - Собственные репозитории для каждого сервиса с скомпилированными
.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 , поэтому подгруппы могут быть недоступны в некоторых git-провайдерах.
PPS: я буду очень признателен за все рекомендации по улучшению этой структуры
PPPS: я прочитал эту статью из Namely
, и мне понравилось.Так что моя структура может быть похожа на структуру из статьи выше