gRPC для Java: библиотеки, настройка и примеры использования
gRPC — это современный высокопроизводительный фреймворк для удалённого вызова процедур (RPC), разработанный Google. Он использует Protocol Buffers (protobuf) в качестве языка определения интерфейсов и сериализации данных, а также HTTP/2 для транспорта. В экосистеме Java gRPC позволяет создавать быстрые, типобезопасные и масштабируемые микросервисы. На этой странице мы разберём основные библиотеки, процесс настройки проекта и приведём рабочие примеры сервера и клиента.
Основные библиотеки для gRPC в Java
Для работы с gRPC в Java используются три ключевые зависимости:
- io.grpc:grpc-netty-shaded — транспортный слой на основе Netty. Обеспечивает поддержку HTTP/2 и безопасность (TLS). Рекомендуется для большинства проектов.
- io.grpc:grpc-protobuf — интеграция с Protocol Buffers. Позволяет генерировать Java-классы из
.protoфайлов. - io.grpc:grpc-stub — библиотека для создания клиентских и серверных заглушек (stubs). Упрощает вызов удалённых методов.
Дополнительно может потребоваться protobuf-java (для работы с сообщениями) и плагин protobuf-gradle-plugin (или аналог для Maven) для генерации кода на этапе сборки.
Настройка проекта (Maven)
Добавьте следующие зависимости в pom.xml:
<dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.62.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.62.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.62.0</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
Также подключите плагин для генерации кода из .proto файлов:
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.1</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.24.0:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.62.0:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Создание .proto файла
Определите сервис и сообщения в файле src/main/proto/hello.proto:
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
После сборки проекта (команда mvn compile) будут сгенерированы классы: HelloRequest, HelloReply, GreeterGrpc и другие.
Реализация сервера gRPC на Java
Создайте класс Hello