Kotlin के लिए gRPC: लाइब्रेरीज़ और उदाहरण
gRPC एक उच्च-प्रदर्शन वाला रिमोट प्रोसीजर कॉल (RPC) फ्रेमवर्क है, जिसे Google द्वारा विकसित किया गया है। यह डेटा सीरियलाइज़ेशन के लिए Protocol Buffers (protobuf) और ट्रांसपोर्ट के लिए HTTP/2 का उपयोग करता है। Kotlin इकोसिस्टम में, gRPC कोरूटीन के साथ पूरी तरह से एकीकृत होता है, जो इसे एसिंक्रोनस माइक्रोसर्विसेज़ बनाने के लिए एक आदर्श विकल्प बनाता है।
इस लेख में, हम आधिकारिक लाइब्रेरी gRPC-Kotlin (grpc-kotlin) का उपयोग करके Kotlin पर gRPC सर्वर और क्लाइंट सेट अप करने का तरीका समझेंगे। आप पूरा चक्र देखेंगे: proto-फ़ाइल के विवरण से लेकर रन और टेस्टिंग तक।
1. मुख्य लाइब्रेरीज़
Kotlin में gRPC के साथ काम करने के लिए निम्नलिखित प्रमुख घटकों का उपयोग किया जाता है:
- protobuf-gradle-plugin —
.protoफ़ाइलों को Kotlin/Java क्लासेज़ में कंपाइल करने के लिए प्लगइन। - grpc-kotlin-stub — लाइब्रेरी जो Kotlin कोरूटीन स्टब्स (suspend-फ़ंक्शन) जनरेट करती है।
- grpc-netty-shaded — Netty-आधारित ट्रांसपोर्ट लेयर (बिल्ट-इन HTTP/2)।
- grpc-protobuf-lite — Android/क्लाइंट के लिए protobuf का हल्का संस्करण।
2. प्रोजेक्ट संरचना
हम Gradle (Kotlin DSL) का उपयोग करेंगे। निम्नलिखित संरचना के साथ एक प्रोजेक्ट बनाएं:
my-grpc-app/├── build.gradle.kts├── settings.gradle.kts└── src/ ├── main/ │ ├── proto/ │ │ └── hello.proto │ └── kotlin/ │ ├── server/ │ │ └── HelloServer.kt │ └── client/ │ └── HelloClient.kt3. proto-फ़ाइल का विवरण
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;}4. Gradle सेटअप (build.gradle.kts)
आवश्यक प्लगइन और डिपेंडेंसी जोड़ें:
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. gRPC सर्वर का कार्यान्वयन
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("प्राप्त अनुरोध: ${request.name} से") return HelloReply.newBuilder() .setMessage("नमस्ते, ${request.name}!") .build() }}
fun main() { val port = 50051 val server = ServerBuilder.forPort(port) .addService(GreeterService()) .build() .start()
println("gRPC सर्वर पोर्ट $port पर शुरू हुआ") server.awaitTermination()}6. gRPC क्लाइंट का कार्यान्वयन
HelloClient.kt फ़ाइल बनाएं:
package com.example.client
import com