परिचय: कार्य कतारों की आवश्यकता क्यों है?
\n\nकल्पना करें कि आप Node.js पर एक वेब सर्वर चला रहे हैं। एक उपयोगकर्ता 1000 ईमेल भेजने का अनुरोध भेजता है। यदि इस अनुरोध को समकालिक रूप से संसाधित किया जाए, तो सर्वर कुछ मिनटों के लिए "लटक" जाएगा - अन्य सभी उपयोगकर्ता प्रतिक्रिया प्राप्त नहीं कर पाएंगे।
\n\nइस समस्या का समाधान क्या है? उत्तर है - कार्य कतारें (task queues)। वे संसाधन-गहन संचालन (ईमेल भेजना, PDF जनरेशन, इमेज प्रोसेसिंग) को स्थगित करने और एप्लिकेशन के मुख्य थ्रेड को ब्लॉक किए बिना उन्हें पृष्ठभूमि में निष्पादित करने की अनुमति देते हैं।
\n\nइस लेख में हम चर्चा करेंगे:
\n- \n
- कार्य कतार क्या है और यह कैसे काम करती है \n
- Node.js के लिए लोकप्रिय लाइब्रेरीज़ (Bull, Kue) \n
- कोड उदाहरण: कार्यों का निर्माण, जोड़ना और प्रसंस्करण \n
- शुरुआती लोगों के लिए सर्वोत्तम प्रथाएँ \n
1. Node.js में कार्य कतारों की मूल बातें
\n\nकार्य कतार क्या है?
\nकार्य कतार एक डेटा संरचना है जो FIFO (First In, First Out - पहले आओ, पहले पाओ) सिद्धांत पर काम करती है। कार्यों को कतार के अंत में जोड़ा जाता है, और शुरुआत से संसाधित किया जाता है। आमतौर पर कतारें Redis - मेमोरी में तेज़ की-वैल्यू स्टोरेज - के आधार पर बनाई जाती हैं।
\n\nकतार के मुख्य घटक:
\n- \n
- Producer - कोड जो कतार में कार्य जोड़ता है \n
- Consumer (Worker) - कोड जो कार्यों को लेता है और उन्हें निष्पादित करता है \n
- Queue Manager - तंत्र जो कतार का प्रबंधन करता है (आमतौर पर Redis) \n
लोकप्रिय लाइब्रेरीज़
\nNode.js के लिए दो मुख्य लाइब्रेरीज़ हैं:
\n- \n
- Bull - आधुनिक, तेज़, प्राथमिकताओं, पुनर्प्रयासों और विलंबों के समर्थन के साथ \n
- Kue - पुरानी, लेकिन सरल लाइब्रेरी (अब कम लोकप्रिय) \n
इस लेख में हम Bull पर ध्यान केंद्रित करेंगे, क्योंकि यह सक्रिय रूप से समर्थित है और इसमें अधिक सुविधाएँ हैं।
\n\n2. Bull की स्थापना और कॉन्फ़िगरेशन
\n\nचरण 1: Redis की स्थापना
\nBull Redis का उपयोग करता है। यदि आपके पास Redis नहीं है, तो इसे स्थापित करें:
\n# macOS\nbrew install redis\n\n# Ubuntu\nsudo apt-get install redis-server\n\n# Redis चलाएँ\nredis-server\n\nचरण 2: Bull की स्थापना
\nएक नया प्रोजेक्ट बनाएँ और पैकेज स्थापित करें:
\nmkdir queue-demo\ncd queue-demo\nnpm init -y\nnpm install bull\n\nचरण 3: बुनियादी कॉन्फ़िगरेशन
\nएक फ़ाइल queue.js बनाएँ:
const Queue = require('bull');\n\n// 'emailQueue' नाम से एक कतार बनाएँ\nconst emailQueue = new Queue('emailQueue', {\n redis: { host: '127.0.0.1', port: 6379 }\n});\n\nmodule.exports = emailQueue;\n\n3. उदाहरण: ईमेल भेजने के लिए कतार
\n\nचरण 1: Producer बनाएँ (कार्य जोड़ना)
\nएक फ़ाइल producer.js बनाएँ:
const emailQueue = require('./queue');\n\nasync function addEmailTask(to, subject, body) {\n // कतार में एक कार्य जोड़ें\n const job = await emailQueue.add({\n to: to,\n subject: subject,\n body: body\n }, {\n // कार्य विकल्प\n attempts: 3, // त्रुटि पर प्रयासों की संख्या\n backoff: 5000, // प्रयासों के बीच विलंब (5 सेकंड)\n delay: 1000 // निष्पादन से पहले विलंब (1 सेकंड)\n });\n\n console.log(`कार्य ID के साथ जोड़ा गया: ${job.id}`);\n return job;\n}\n\n// उपयोग उदाहरण\naddEmailTask('user@example.com', 'नमस्ते!', 'परीक्षण संदेश');\n\nचरण 2: Worker बनाएँ (कार्य प्रसंस्करण)
\nएक फ़ाइल worker.js बनाएँ:
const emailQueue = require('./queue');\n\n// ईमेल भेजने का अनुकरण करने वाला फ़ंक्शन\nasync function sendEmail(to, subject, body) {\n console.log(`${to} को ईमेल भेजा जा रहा है...`);\n // विलंब का अनुकरण\n await new Promise(resolve => setTimeout(resolve, 2000));\n console.log(`ईमेल भेजा गया: ${subject}`);\n}\n\n// कतार हैंडलर\nemai