Kotlin के लिए कार्य कतारें: Coroutines से उन्नत समाधान तक
\n\nKotlin में आधुनिक विकास में, कार्य कतारें (task queues) उत्तरदायी और स्केलेबल अनुप्रयोगों के निर्माण के लिए महत्वपूर्ण भूमिका निभाती हैं। चाहे आप Ktor पर सर्वर एप्लिकेशन, Android के लिए मोबाइल एप्लिकेशन, या Compose पर डेस्कटॉप समाधान बना रहे हों, कार्यों के अतुल्यकालिक प्रसंस्करण के तंत्र को समझना एक अनिवार्य कौशल है। इस लेख में, हम Kotlin में कार्य कतारों के साथ काम करने के लिए बुनियादी उपकरणों, पुस्तकालयों और पैटर्न का विश्लेषण करेंगे।
\n\n1. अंतर्निहित उपकरण: Kotlin Coroutines
\n\nपहली चीज़ जिससे शुरुआत करनी चाहिए वह है Kotlin Coroutines। वे हल्के थ्रेड (coroutines) और चैनलों (Channel) और डिस्पैचर्स (Dispatcher) के माध्यम से अंतर्निहित कतारें प्रदान करते हैं।
चैनलों पर कतार का मूल उदाहरण:
\n\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.channels.Channel\n\nfun main() = runBlocking {\n val channel = Channel<String>(capacity = 10) // बफ़र की गई कतार\n\n // उत्पादक\n launch {\n repeat(5) {\n channel.send("कार्य №${it + 1}")\n delay(100)\n }\n channel.close()\n }\n\n // उपभोक्ता\n launch {\n for (task in channel) {\n println("प्रसंस्करण कर रहा हूँ: $task")\n delay(200)\n }\n }\n}\n\n\nयह पैटर्न एक या अधिक उपभोक्ताओं के साथ सरल कतारें बनाने की अनुमति देता है। हालाँकि, जटिल परिदृश्यों (प्राथमिकताएँ, विफल कार्यों का पुनरारंभ, निगरानी) के लिए विशेष पुस्तकालयों की आवश्यकता होती है।
\n\n2. KJob — पृष्ठभूमि कार्यों के लिए पुस्तकालय
\n\nKJob (Kotlin Job Queue) प्राथमिकताओं, पुनः प्रयासों और स्थिति ट्रैकिंग के समर्थन के साथ पृष्ठभूमि कार्यों के प्रबंधन के लिए एक हल्का पुस्तकालय है। यह कोरुटीन के ऊपर बनाया गया है और Android और सर्वर अनुप्रयोगों के लिए आदर्श है।
\n\nस्थापना (Gradle):
\ndependencies {\n implementation("com.github.kjob:kjob:0.6.0")\n}\n\nउपयोग का उदाहरण:
\n\nimport com.github.kjob.*\nimport kotlinx.coroutines.runBlocking\n\nfun main() = runBlocking {\n val queue = KJobQueue()\n\n // प्राथमिकता के साथ कार्य जोड़ें\n queue.add(KJob("high-priority") {\n println("महत्वपूर्ण कार्य निष्पादित हो रहा है")\n }.priority(10))\n\n queue.add(KJob("low-priority") {\n println("गैर-महत्वपूर्ण कार्य निष्पादित हो रहा है")\n }.priority(1))\n\n // प्रसंस्करण शुरू करें\n queue.processAll()\n}\n\n\nKJob समर्थन करता है:
\n- \n
- प्राथमिकताएँ — उच्च प्राथमिकता वाले कार्य पहले निष्पादित होते हैं। \n
- पुनः प्रयास — त्रुटियों पर स्वचालित पुनरारंभ। \n
- टाइम-आउट — निष्पादन समय की सीमा। \n
- जीवनचक्र घटनाएँ — प्रारंभ, समाप्ति, त्रुटि पर सदस्यता ली जा सकती है। \n
3. KQueue — वितरित कतारें
\n\nयदि आपको वितरित कार्य कतार की आवश्यकता है (उदाहरण के लिए, माइक्रोसर्विसेज के लिए), तो KQueue पर ध्यान दें। यह शुद्ध Kotlin में लिखा गया Redis या Kafka के माध्यम से कतारों के साथ काम करने के लिए एक पुस्तकालय है।
\n\nRedis के साथ उदाहरण:
\n\nimport com.kqueue.*\nimport io.lettuce.core.RedisClient\n\nfun main() {\n val client = RedisClient.create("redis://localhost")\n val queue = KQueue(client)\n\n // कार्य भेजें\n queue.push("orders", "ऑर्डर #123 संसाधित करें")\n\n // कार्यों का उपभोग करें\n queue.poll("orders") { task ->\n println("कार्य प्राप्त हुआ: ${task.body}")\n // प्रसंस्करण...\n task.ack() // निष्पादन की पुष्टि\n }\n}\n\n\nKQueue सुनिश्चित करता है:
\n- \n
- गारंटीकृत वितरण (at-least-once)। \n
- कार्य प्रक्रियाओं के बीच लोड संतुलन। \n
- विलंबित कार्यों (scheduled tasks) के लिए समर्थन। \n
- Prometheus मीट्रिक के माध्यम से निगरानी। \n