gRPC para Java: bibliotecas e exemplos de uso
Na arquitetura moderna de microsserviços, a comunicação eficiente entre serviços desempenha um papel importante. Uma das soluções mais performáticas é o gRPC — um framework de chamada de procedimento remoto (RPC) do Google, baseado em HTTP/2 e Protocol Buffers. Neste artigo, vamos abordar quais bibliotecas são necessárias para trabalhar com gRPC em Java, como configurar o projeto e escrever um servidor e cliente simples.
Principais bibliotecas para gRPC em Java
Para o desenvolvimento de aplicações gRPC em Java, utiliza-se o ecossistema grpc-java. Ele inclui três componentes principais:
- grpc-core — o núcleo do framework, que implementa a camada de transporte e o gerenciamento de canais.
- grpc-stub — geração de stubs (proxies) de cliente e servidor com base em arquivos proto.
- grpc-protobuf — integração com Protocol Buffers (protobuf) para serialização de dados.
Adicionalmente, pode ser necessário o protoc — um compilador para gerar classes Java a partir de arquivos .proto. Em projetos modernos, é conveniente usar plugins para Maven ou Gradle, que automatizam esse processo.
Configuração do projeto com Maven
Adicione as dependências no 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>Também conecte o plugin para geração de código a partir de arquivos 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>Definição do serviço via Protocol Buffers
Crie o arquivo hello.proto no diretório src/main/proto:
syntax = "proto3";
package example;
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {}}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Após executar mvn compile, serão geradas as classes HelloRequest, HelloReply e GreeterGrpc.
Implementação do servidor gRPC em Java
Crie uma classe de servidor que implementa a interface gerada:
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