Совместное использование прото-или сгенерированных файлов между микрослужбами

#protocol-buffers #grpc-java #protobuf-java

Вопрос:

Я создаю микросервисы Spring Boot с использованием protobuf и gRPC для связи. Однако я понял, что мне нужно будет определить сущности во всех микросервисах, которые этого требуют.

Вместо прямого метода копирования и вставки необработанного файла (не рекомендуется) я могу придумать 2 метода:

  1. общий доступ к необработанному прото-файлу
  2. совместное использование файлов, созданных прото

Как это правильно сделать? Если я предоставляю общий доступ к необработанным прото-файлам, как я могу правильно обмениваться прото-файлами между микросервисами?

Комментарии:

1. Рекомендуется обмениваться необработанными прото-файлами. Что-то вроде этого medium.com/namely-labs/… может дать вам некоторое представление о том, как обмениваться прото-файлами.

Ответ №1:

При совместном использовании на разных языках типичным является копирование необработанных прототипов между репозиториями. Некоторым системам сборки, таким как Bazel, не нужно копировать прототипы, но большинству это нужно. При копировании прототипов важно, чтобы существовала единственная хорошо известная каноническая копия прототипа, а все остальные копии были битово идентичны версии канонической копии.

Но при совместном использовании в коллекции проектов, ориентированных на Java, создание канонического пакета Java для сгенерированного кода превосходит, так как его проще использовать, и это помогает убедиться, что только одна копия сгенерированного кода находится в пути к классам.

Типичная банка Java protobuf будет включать как исходные прототипы, так и сгенерированный код; исходные прототипы автоматически включаются как плагинами Maven, так и плагинами Gradle Protobuf. Затем вы зависите от этой банки, как обычно, и она обеспечивает зависимость для Java-кода и определений Protobuf. Плагины Maven и Gradle Protobuf автоматически находят файлы .proto в зависимостях и добавляют их в путь включения ( -I ) протокола при создании кода.

Комментарии:

1. Спасибо вам за ваше удивительное объяснение! Однако для меня это кажется слишком продвинутым. Знаете ли вы о каких — либо связях с реальным примером реализации?

2. «Просто сделайте проект как обычно», но только с src/main/proto. Все примеры в grpc-java имеют .protos, включенные в файлы .class в их jar, потому что это то, что плагины делают по умолчанию.