#spring-boot #grpc
#весенняя загрузка #grpc
Вопрос:
Я новичок в grpc, я не знаю, как использовать его с весенней загрузкой, но используя ссылку ниже
-
https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-server
-
https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-client
примечание *: — первый предназначен для серверного проекта, а второй — для клиентского проекта.
я создал проект на grpc с весенней загрузкой, но я не могу понять одну вещь в этом, что в проекте клиента grpc, как я могу использовать классы, которые генерируются protobuf в проекте сервера grpc. поскольку он не создает какой-либо прото-файл в проекте клиента grpc, то как я могу использовать классы проекта сервера grpc в проекте клиента grpc или мы можем создать один проект для сервера grpc и клиента вместо создания разных проектов для обоих.
У меня есть два запроса, связанных с этим вопросом: — 1. Как использовать классы grpc, сгенерированные компилятором protobuf, в другом проекте, например, если клиент и сервер — это два разных проекта, и только сервер имеет файлы, сгенерированные прототипом, и клиент хочет использовать одни и те же классы.
- Как я могу создать все это в одном проекте, означает клиент и сервер в одном проекте, а затем как я могу запустить этот проект с пошаговой демонстрацией.
Ответ №1:
Вы можете сделать это двумя способами:
-
Скопируйте
.proto
файлы между двумя проектами, и пусть каждый сгенерирует свои собственные копии сгенерированного кода. Это, вероятно, самый простой способ, позволяющий избежать проверки сгенерированного кода в системе управления версиями. Недостатком этого подхода является то, что.proto
файлы могут устареть, если вы измените один, а не другой. -
Храните
.proto
в одном репозитории как клиента, так и сервера и заставляйте оба зависеть от сгенерированного кода. Это позволяет изменять прототип для клиента и сервера одновременно, но требует, чтобы код находился в одном репозитории (иногда это называют подходом «Monorepo»). Недостатком этого является то, что клиентские и серверные репозитории могут стать слишком большими, и их необходимо разделить.
Google (автор Protobuf) обычно использует вариант № 2, но многие пользователи Protobuf предпочитают вариант 1. Я бы настоятельно рекомендовал каждый раз восстанавливать классы, а не проверять сгенерированный код. ABI классов Protobuf может время от времени меняться, и вы потеряете обратную совместимость Protobuf.
Комментарии:
1. я нашел ответ на первый вопрос. не могли бы вы рассказать мне о знании или ответе на второй вопрос, пожалуйста.
2. Человек, который задал вопрос, что интегрировать grpc в приложение Spring boot
Ответ №2:
Я создал образец приложения spring boot grpc и разместил его здесьhttps://javabelazy.blogspot.com /
-
используйте зависимость net.devh.grpc-server-spring-boot-starter в вашем pom
-
создайте протофайл (пример кода службы)
служба PingPongService { возвращает rpc ping(PingRequest) (PongResponse) {
option (google.api.http) = { get: "/v1/grpc/{ping}" };
}
-
сгенерируйте заглушки для протофайла, используя io.grpc:protocol-gen-grpc-java:1.30.0:exe
-
используйте nettyserver
-
установите порт равным 9090 (по умолчанию) grpc.server.port=9090 в свойствах приложения
Ответ №3:
Я использовал https://github.com/yidongnan/grpc-spring-boot-starter недавно. Вы получите большинство функций Spring вместе с grpc, используя эту библиотеку.
Ответ №4:
Существует yidongnan /grpc-spring-boot-starter (ДОКУМЕНТ), который реализует запуск автоконфигурации springboot как для клиента, так и для сервера.
Он реализует @GrpcServer
и @GrpcClient
.
@GrpcService, который добавит службу на сервер grpc и автоматически запустит сервер.
Аннотация, которая отмечает службы gRPC, которые должны быть зарегистрированы на сервере gRPC. Если используется автоматическая настройка spring-boot, то сервер будет создан автоматически. Эту аннотацию следует добавлять только к реализациям BindableService (GrpcService-ImplBase).
@GrpcClient, который автоматически создаст канал и заглушку для клиента
Пример: @GrpcClient(«MyClient») <-> grpc.client.MyClient.address=static://localhost:9090
На основе этих примеров я также реализую свой простой пример сервера и клиента:
ppdouble/springboot-grpc-server-пример
ppdouble/springboot-grpc-client-образец
На основе этих примеров вы можете реализовать свой проект или внедрить новый запуск автоконфигурации springboot.