gRPC für Kotlin: Bibliotheken, Server und Client – Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für Kotlin: Bibliotheken und Beispiele



gRPC ist ein leistungsstarkes Framework für entfernte Prozeduraufrufe (RPC), das von Google entwickelt wurde. Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 als Transportprotokoll. Im Kotlin-Ökosystem lässt sich gRPC hervorragend mit Koroutinen integrieren, was es zur idealen Wahl für die Erstellung asynchroner Mikroservices macht.



In diesem Artikel werden wir durchgehen, wie man einen gRPC-Server und -Client mit Kotlin unter Verwendung der offiziellen Bibliothek gRPC-Kotlin (grpc-kotlin) einrichtet. Sie sehen den gesamten Zyklus: von der Beschreibung der Proto-Datei bis zum Start und Testen.



1. Wichtige Bibliotheken



Für die Arbeit mit gRPC in Kotlin werden die folgenden Schlüsselkomponenten verwendet:



  • protobuf-gradle-plugin — Plugin zum Kompilieren von .proto-Dateien in Kotlin/Java-Klassen.
  • grpc-kotlin-stub — Bibliothek, die Kotlin-Koroutinen-Stubs (suspend-Funktionen) generiert.
  • grpc-netty-shaded — Transportschicht basierend auf Netty (eingebautes HTTP/2).
  • grpc-protobuf-lite — Leichte Version von protobuf für Android/Clients.


2. Projektstruktur



Wir werden Gradle (Kotlin DSL) verwenden. Erstellen Sie ein Projekt mit folgender Struktur:



my-grpc-app/├── build.gradle.kts├── settings.gradle.kts└── src/    ├── main/    │   ├── proto/    │   │   └── hello.proto    │   └── kotlin/    │       ├── server/    │       │   └── HelloServer.kt    │       └── client/    │           └── HelloClient.kt


3. Beschreibung der Proto-Datei



Erstellen Sie hello.proto in src/main/proto/:



syntax = "proto3";

package com.example.grpc;

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

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


4. Gradle-Konfiguration (build.gradle.kts)



Fügen Sie die erforderlichen Plugins und Abhängigkeiten hinzu:



plugins {    id("org.jetbrains.kotlin.jvm") version "1.9.22"    id("com.google.protobuf") version "0.9.4"}

repositories { mavenCentral()}

dependencies { implementation("io.grpc:grpc-kotlin-stub:1.4.1") implementation("io.grpc:grpc-netty-shaded:1.60.0") implementation("io.grpc:grpc-protobuf-lite:1.60.0")}

protobuf { protoc { artifact = "com.google.protobuf:protoc:3.25.1" } plugins { create("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.60.0" } create("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.1:jdk8@jar" } } generateProtoTasks { all().forEach { task -> task.plugins { create("grpc") { } create("grpckt") { } } } }}


5. Implementierung des gRPC-Servers



Erstellen Sie die Datei HelloServer.kt:



package com.example.server

import com.example.grpc.GreeterGrpcKtimport com.example.grpc.HelloReplyimport com.example.grpc.HelloRequestimport io.grpc.ServerBuilder

class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() { override suspend fun sayHello(request: HelloRequest): HelloReply { println("Anfrage erhalten von: ${request.name}") return HelloReply.newBuilder() .setMessage("Hallo, ${request.name}!") .build() }}

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

println("gRPC-Server gestartet auf Port $port") server.awaitTermination()}


6. Implementierung des gRPC-Clients



Erstellen Sie die Datei HelloClient.kt:



package com.example.client

import com

Empfehlungen