जावास्क्रिप्ट (Node.js) में कार्य कतारें: एक संपूर्ण गाइड

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

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

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

जावास्क्रिप्ट (Node.js) में कार्य कतारों के साथ काम करना



आधुनिक वेब एप्लिकेशन और माइक्रोसर्विस आर्किटेक्चर में, अक्सर पृष्ठभूमि कार्यों को निष्पादित करने की आवश्यकता होती है जो निष्पादन के मुख्य प्रवाह को अवरुद्ध नहीं करना चाहिए। कार्य कतारें एक शक्तिशाली उपकरण हैं जो अतुल्यकालिक संचालन को प्रबंधित करने, विश्वसनीयता, स्केलेबिलिटी और दोष सहनशीलता सुनिश्चित करने में मदद करती हैं। इस लेख में, हम विस्तार से समझेंगे कि Node.js वातावरण में कार्य कतारों के साथ कैसे काम करें, प्रमुख लाइब्रेरीज़ पर विचार करें और व्यावहारिक कोड उदाहरण लिखें।



कार्य कतार क्या है और इसकी आवश्यकता क्यों है?



कार्य कतार (Task Queue) एक डेटा संरचना है जो FIFO (First In, First Out) सिद्धांत पर काम करती है। कार्यों को कतार में रखा जाता है और वर्कर्स (worker) द्वारा आने के क्रम में संसाधित किया जाता है। मुख्य उपयोग के मामलों में शामिल हैं:



  • ईमेल सूचनाएं भेजना — उपयोगकर्ता को ईमेल भेजे जाने तक प्रतीक्षा करने की आवश्यकता नहीं है।
  • रिपोर्ट या PDF जनरेट करना — संसाधन-गहन संचालन जो अतुल्यकालिक रूप से करना बेहतर है।
  • अपलोड की गई छवियों का प्रसंस्करण — आकार बदलना, संपीड़न, वॉटरमार्क जोड़ना।
  • बाहरी API के साथ एकीकरण — दर सीमित (rate limiting) के साथ अनुरोध निष्पादित करना।
  • निर्धारित कार्य (cron) — डेटाबेस की नियमित सफाई या कैश अपडेट करना।


कतारों का उपयोग मुख्य सर्वर को अनलोड करने, दोष सहनशीलता बढ़ाने (यदि एक वर्कर विफल हो जाता है, तो कार्य दूसरे को स्थानांतरित कर दिया जाएगा) और अस्थायी विफलताओं के दौरान भी कार्य निष्पादन की गारंटी देने की अनुमति देता है।



Node.js पर मेमोरी में सरल कतार



शुरुआत के लिए, हम बिना किसी बाहरी निर्भरता के एक सरल कतार लागू करेंगे। यह दृष्टिकोण प्रोटोटाइपिंग या बहुत छोटी परियोजनाओं के लिए उपयुक्त है, लेकिन स्थायित्व (persistence) की कमी के कारण प्रोडक्शन के लिए अनुशंसित नहीं है।



class SimpleQueue {    constructor() {        this.queue = [];        this.processing = false;    }

enqueue(task) { this.queue.push(task); this.processNext(); }

async processNext() { if (this.processing || this.queue.length === 0) return; this.processing = true; const task = this.queue.shift(); try { await task(); } catch (err) { console.error('कार्य निष्पादन में त्रुटि:', err); } finally { this.processing = false; this.processNext(); } }}

// उपयोग का उदाहरणconst queue = new SimpleQueue();

queue.enqueue(async () => { console.log('कार्य 1: ईमेल भेजना');});

queue.enqueue(async () => { console.log('कार्य 2: रिपोर्ट जनरेट करना');});

console.log('कार्य कतार में जोड़ दिए गए');


यह कोड बुनियादी तंत्र को प्रदर्शित करता है: कार्य एक के बाद एक क्रमिक रूप से निष्पादित होते हैं। हालांकि, सर्वर को पुनरारंभ करने पर सभी असंसाधित कार्य खो जाएंगे।



Bull — Redis पर पेशेवर कतार



Node.js में गंभीर परियोजनाओं के लिए, Bull लाइब्रेरी डी-फैक्टो मानक है। यह बैकएंड के रूप में Redis का उपयोग करती है, जो स्थायित्व, प्राथमिकता समर्थन, पुन: प्रयास और विलंबित कार्यों को सुनिश्चित करती है।



स्थापना:

npm install bull


एक सरल प्रोड्यूसर और कंज्यूमर का उदाहरण:



const Queue = require('bull');

// 'email-queue' नाम से एक कतार बनाएंconst emailQueue = new Queue('email-queue', { redis: { host: 'localhost', port: 6379 }});

// वर्कर फ़ंक्शन: कार्यों को संसाधित करता हैemailQueue.process(async (job) => { const { to, subject, body } = job.data; console.log(`${to} को ईमेल भेज रहा है: ${subject}`); // यहां ईमेल भेजने का वास्तविक कोड होगा await new Promise(resolve => setTimeout(resolve, 1000)); return { success: true };});

// कार्य जोड़ना

ब्लॉग

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