gRPC para Kotlin: bibliotecas e exemplos de uso

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

gRPC para Kotlin: bibliotecas e exemplos de uso



gRPC é um framework de alto desempenho para chamada remota de procedimentos (RPC), desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. No ecossistema Kotlin, o gRPC se integra de forma especialmente suave graças a bibliotecas que suportam corrotinas e tipagem estrita. Neste artigo, veremos as principais ferramentas necessárias para trabalhar com gRPC em Kotlin e forneceremos exemplos funcionais de servidor e cliente.



Bibliotecas principais



Para trabalhar com gRPC em Kotlin, você precisará da seguinte pilha:



  • grpc-kotlin — biblioteca oficial do Google que fornece APIs específicas do Kotlin, incluindo suporte a corrotinas (funções suspend, Flow).
  • protobuf-java e protobuf-gradle-plugin — para geração de classes a partir de arquivos .proto.
  • grpc-netty ou grpc-okhttp — camada de transporte (Netty para servidor, OkHttp para Android/cliente).
  • javax.annotation-api — frequentemente necessário para compilar corretamente o código gerado.


Para gerenciar dependências, use Gradle (Kotlin DSL). Exemplo do bloco dependencies:



dependencies {    implementation("io.grpc:grpc-netty-shaded:1.58.0")    implementation("io.grpc:grpc-protobuf:1.58.0")    implementation("io.grpc:grpc-stub:1.58.0")    implementation("io.grpc:grpc-kotlin-stub:1.4.0")    implementation("com.google.protobuf:protobuf-java:3.24.3")    implementation("javax.annotation:javax.annotation-api:1.3.2")}


Também é obrigatório adicionar o plugin protobuf para geração de código:



plugins {    id("com.google.protobuf") version "0.9.4"}

protobuf { protoc { artifact = "com.google.protobuf:protoc:3.24.3" } plugins { create("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.58.0" } create("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.0:jdk8@jar" } } generateProtoTasks { all().forEach { it.plugins { create("grpc") create("grpckt") } } }}


Definição do serviço através do arquivo .proto



Crie o arquivo src/main/proto/hello.proto:



syntax = "proto3";

package com.example.grpc;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


Após executar a compilação do Gradle, as classes serão geradas: HelloRequest, HelloReply, GreeterGrpc e GreeterGrpcKt (versão Kotlin com corrotinas).



Implementação do servidor gRPC em Kotlin



O servidor usará a classe gerada GreeterGrpcKt.GreeterCoroutineImplBase:



import com.example.grpc.GreeterGrpcKtimport com.example.grpc.HelloReplyimport com.example.grpc.HelloRequestimport io.grpc.ServerBuilderimport kotlinx.coroutines.runBlocking

class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() { override suspend fun sayHello(request: HelloRequest): HelloReply { val message = "Olá, ${request.name}!" println("Requisição recebida: ${request.name}") return HelloReply.newBuilder().setMessage(message).build() }}

fun main() { val port = 50051 val server = ServerBuilder.forPort(port) .addService(GreeterService()) .build()

server.start() println("Servidor iniciado na porta $port") server.awaitTermination()}


Implementação do cliente gRPC em Kotlin



O cliente usa um canal e um stub com suporte a corrotinas:



import com.example.grpc.GreeterGrpcKti                    

Recommendations