JavaScript (Node.js) में टास्क क्यू: शुरुआती के लिए पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: JavaScript में टास्क क्यू की आवश्यकता क्यों?

\n

आधुनिक वेब डेवलपमेंट में, एप्लिकेशन को अक्सर ऐसे कार्यों का सामना करना पड़ता है जो एक HTTP रिक्वेस्ट के दौरान तुरंत पूरे नहीं किए जा सकते। ईमेल भेजना, इमेज प्रोसेसिंग, PDF रिपोर्ट जनरेट करना, या बाहरी API के साथ सिंक्रोनाइज़ेशन — इन सभी में समय लगता है और यदि इन्हें सिंक्रोनस रूप से किया जाए तो सर्वर हैंग हो सकता है।

\n

टास्क क्यू (Task Queues) इस समस्या का समाधान करते हैं। वे संसाधन-गहन कार्यों को स्थगित करने और उन्हें बैकग्राउंड में एसिंक्रोनस रूप से प्रोसेस करने की अनुमति देते हैं। इस लेख में, हम Node.js वातावरण में लोकप्रिय लाइब्रेरीज़ का उपयोग करके टास्क क्यू बनाने और प्रबंधित करने का तरीका समझेंगे।

\n\n

1. Node.js में क्यू के साथ काम करने की मूल बातें

\n

टास्क क्यू एक डेटा संरचना है जो FIFO (First In, First Out) सिद्धांत पर काम करती है। कार्य क्यू के अंत में जोड़े जाते हैं और शुरुआत से प्रोसेस किए जाते हैं। Node.js के संदर्भ में, इसका मतलब है कि आपका सर्वर उपयोगकर्ता को तुरंत जवाब दे सकता है ("कार्य प्रोसेसिंग के लिए स्वीकार कर लिया गया"), और वास्तविक कार्य बाद में पूरा होगा।

\n

Node.js में क्यू के साथ काम करने के लिए विशेष लाइब्रेरीज़ का उपयोग किया जाता है जो बाहरी स्टोरेज (आमतौर पर Redis) पर निर्भर करती हैं। आइए दो सबसे लोकप्रिय लाइब्रेरीज़ पर नज़र डालें:

\n
    \n
  • Bull — Redis-आधारित आधुनिक, तेज़ और स्थिर लाइब्रेरी।
  • \n
  • Kue — पुरानी लेकिन अभी भी लोकप्रिय लाइब्रेरी जिसमें बिल्ट-इन वेब इंटरफ़ेस है।
  • \n
\n

हम Bull पर ध्यान केंद्रित करेंगे, क्योंकि यह नए प्रोजेक्ट्स के लिए डी-फैक्टो मानक है।

\n\n

1.1 Bull को इंस्टॉल और कनेक्ट करना

\n

सबसे पहले, आवश्यक डिपेंडेंसी इंस्टॉल करें:

\n
npm install bull ioredis
\n

अब एक सरल क्यू बनाते हैं:

\n
const Queue = require('bull');\nconst myQueue = new Queue('emailQueue', {\n  redis: {\n    host: '127.0.0.1',\n    port: 6379\n  }\n});\n\n// क्यू में एक कार्य जोड़ें\nmyQueue.add({\n  to: 'user@example.com',\n  subject: 'स्वागत ईमेल',\n  body: 'हमारी वेबसाइट पर आपका स्वागत है!'\n});\n\nconsole.log('कार्य क्यू में जोड़ दिया गया');
\n

इस उदाहरण में, हमने emailQueue नामक एक क्यू बनाया और उसमें एक कार्य जोड़ा — ईमेल भेजना। कार्य अभी तक पूरा नहीं हुआ है, यह बस अपने हैंडलर की प्रतीक्षा कर रहा है।

\n\n

2. क्यू से कार्यों को प्रोसेस करना

\n

कार्यों को निष्पादित करने के लिए, हमें एक हैंडलर (consumer) की आवश्यकता है। यह क्यू को "सुनेगा" और निष्पादन के लिए उसमें से कार्य लेगा।

\n

एक फ़ाइल worker.js बनाएं:

\n
const Queue = require('bull');\nconst emailQueue = new Queue('emailQueue', {\n  redis: { host: '127.0.0.1', port: 6379 }\n});\n\n// हैंडलर फ़ंक्शन\nemailQueue.process(async (job) => {\n  const { to, subject, body } = job.data;\n  console.log(`${to} पर ईमेल भेजा जा रहा है...`);\n  \n  // ईमेल भेजने का अनुकरण (वास्तविक प्रोजेक्ट में यहाँ nodemailer होगा)\n  await new Promise(resolve => setTimeout(resolve, 2000));\n  \n  console.log(`"${subject}" ईमेल ${to} पर भेज दिया गया`);\n  return { status: 'sent', email: to };\n});\n\nconsole.log('हैंडलर शुरू हो गया है और कार्यों की प्रतीक्षा कर रहा है...');
\n

इस स्क्रिप्ट को चलाएं, और फिर पहले उदाहरण से एक कार्य जोड़ें। आप देखेंगे कि कार्य प्रोसेस हो गया है।

\n\n

2.1 त्रुटि प्रबंधन और पुनः प्रयास

\n

वास्तविक प्रोजेक्ट्स में, कार्य विफल हो सकते हैं (उदाहरण के लिए, SMTP सर्वर अनुपलब्ध)। Bull बिल्ट-इन पुनः प्रयास तंत्र प्रदान करता है:

\n
emailQueue.add(\n  { to: 'user@example.com', subject: 'महत्वपूर्ण ईमेल' },\n  { \n    attempts: 5,          // प्रयासों की संख्या\n    backoff: { type: 'exponential', delay: 2000 } // एक्सपोनेंशियल देरी\n  }\n);\n\n// हैंडलर में विफलता को संभाला जा सकता है\nemailQueue.on('failed', (job, err) => {\n  console.error(`कार्य ${job.id} विफल: ${err.message}`);\n});
\n\n

3. क्यू की उन्नत सुविधाएँ

\n

Bull कार्यों के प्रबंधन के लिए कई उपयोगी फ़ंक्शन प्रदान करता है।

\n\n

3.1 कार्य प्राथमिकताएँ

ब्लॉग

पुस्तक अनुशंसाएँ