Как использовать grpc с загрузкой spring

#spring-boot #grpc

#весенняя загрузка #grpc

Вопрос:

Я новичок в grpc, я не знаю, как использовать его с весенней загрузкой, но используя ссылку ниже

  1. https://github.com/saturnism/grpc-java-by-example/tree/master/simple-grpc-server

  2. 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. Как я могу создать все это в одном проекте, означает клиент и сервер в одном проекте, а затем как я могу запустить этот проект с пошаговой демонстрацией.

Ответ №1:

Вы можете сделать это двумя способами:

  1. Скопируйте .proto файлы между двумя проектами, и пусть каждый сгенерирует свои собственные копии сгенерированного кода. Это, вероятно, самый простой способ, позволяющий избежать проверки сгенерированного кода в системе управления версиями. Недостатком этого подхода является то, что .proto файлы могут устареть, если вы измените один, а не другой.

  2. Храните .proto в одном репозитории как клиента, так и сервера и заставляйте оба зависеть от сгенерированного кода. Это позволяет изменять прототип для клиента и сервера одновременно, но требует, чтобы код находился в одном репозитории (иногда это называют подходом «Monorepo»). Недостатком этого является то, что клиентские и серверные репозитории могут стать слишком большими, и их необходимо разделить.

Google (автор Protobuf) обычно использует вариант № 2, но многие пользователи Protobuf предпочитают вариант 1. Я бы настоятельно рекомендовал каждый раз восстанавливать классы, а не проверять сгенерированный код. ABI классов Protobuf может время от времени меняться, и вы потеряете обратную совместимость Protobuf.

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

1. я нашел ответ на первый вопрос. не могли бы вы рассказать мне о знании или ответе на второй вопрос, пожалуйста.

2. Человек, который задал вопрос, что интегрировать grpc в приложение Spring boot

Ответ №2:

Я создал образец приложения spring boot grpc и разместил его здесьhttps://javabelazy.blogspot.com /

  1. используйте зависимость net.devh.grpc-server-spring-boot-starter в вашем pom

  2. создайте протофайл (пример кода службы)

служба PingPongService { возвращает rpc ping(PingRequest) (PongResponse) {

 option (google.api.http) = { get: "/v1/grpc/{ping}" };
}
  
  1. сгенерируйте заглушки для протофайла, используя io.grpc:protocol-gen-grpc-java:1.30.0:exe

  2. используйте nettyserver

  3. установите порт равным 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

пример сервера nils

пример клиента nils

На основе этих примеров я также реализую свой простой пример сервера и клиента:

ppdouble/springboot-grpc-server-пример

ppdouble/springboot-grpc-client-образец

На основе этих примеров вы можете реализовать свой проект или внедрить новый запуск автоконфигурации springboot.