gRPC для Java: библиотеки, настройка и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

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

Рекомендаций