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

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

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

Начать курс

gRPC для Java: библиотеки и примеры использования

В современной микросервисной архитектуре важную роль играет эффективное взаимодействие между сервисами. Одним из самых производительных решений является gRPC — фреймворк удалённого вызова процедур (RPC) от Google, основанный на HTTP/2 и Protocol Buffers. В этой статье мы разберём, какие библиотеки необходимы для работы с gRPC в Java, как настроить проект и написать простой сервер с клиентом.

Основные библиотеки для gRPC в Java

Для разработки gRPC-приложений на Java используется экосистема grpc-java. Она включает три ключевых компонента:

  • grpc-core — ядро фреймворка, реализующее транспортный уровень и управление каналами.
  • grpc-stub — генерация клиентских и серверных заглушек (stubs) на основе proto-файлов.
  • grpc-protobuf — интеграция с Protocol Buffers (protobuf) для сериализации данных.

Дополнительно может потребоваться protoc — компилятор для генерации Java-классов из .proto файлов. В современных проектах удобно использовать плагины для Maven или Gradle, которые автоматизируют этот процесс.

Настройка проекта с Maven

Добавьте зависимости в pom.xml:

<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-netty-shaded</artifactId>
    <version>1.62.2</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-protobuf</artifactId>
    <version>1.62.2</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-stub</artifactId>
    <version>1.62.2</version>
</dependency>
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

Также подключите плагин для генерации кода из proto-файлов:

<plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>0.6.1</version>
    <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.25.3:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.62.2:exe:${os.detected.classifier}</pluginArtifact>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>compile-custom</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Определение сервиса через Protocol Buffers

Создайте файл hello.proto в директории src/main/proto:

syntax = "proto3";

package example;

service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
    string name = 1;
}

message HelloReply {
    string message = 1;
}

После выполнения mvn compile будут сгенерированы классы HelloRequest, HelloReply и GreeterGrpc.

Реализация gRPC сервера на Java

Создайте класс сервера, который реализует сгенерированный интерфейс:

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;

public class HelloServer {
    public static void main(String[] args) throws Exception {
        Server server = ServerBuilder.forPort(50051)
                .addService(new GreeterImpl())
                .build()
                .start();
        System.out.println("Сервер запущен на порту 50051");
        server.awaitTermination();
    }

    static class GreeterImpl extends GreeterGrpc.GreeterImplBase {
        @Override
        public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
            String greeting = "Привет, " + request.getName() + "!";
            HelloReply reply =                    

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