JavaScript (Node.js) के लिए कार्य कतारें: Bull, Bee-Queue और Kue
Node.js पर वेब एप्लिकेशन विकसित करते समय, अनुरोधों के मुख्य प्रवाह को अवरुद्ध किए बिना लंबी या संसाधन-गहन संचालन को एसिंक्रोनस रूप से निष्पादित करने की आवश्यकता अक्सर उत्पन्न होती है। विशिष्ट उदाहरण: ईमेल सूचनाएं भेजना, अपलोड की गई छवियों को संसाधित करना, PDF रिपोर्ट तैयार करना या बाहरी API के साथ सिंक्रनाइज़ेशन। इन समस्याओं को हल करने के लिए, कार्य कतारों (job queues) का उपयोग किया जाता है - एक तंत्र जो कार्य के निष्पादन को स्थगित करने, लोड वितरित करने और दोष सहनशीलता सुनिश्चित करने की अनुमति देता है।
इस लेख में, हम Node.js इकोसिस्टम में कतार प्रबंधन के लिए तीन लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: Bull, Bee-Queue और Kue। उनमें से प्रत्येक की अपनी विशेषताएं, लाभ और उपयोग के परिदृश्य हैं।
कार्य कतारों की आवश्यकता क्यों है?
Node.js पर बैकएंड में कतारों को लागू करने के मुख्य कारण:
- मुख्य प्रवाह को राहत देना। लंबी संक्रियाएं (जैसे, 1000 ईमेल भेजना) उपयोगकर्ता की प्रतिक्रिया को अवरुद्ध नहीं करती हैं।
- पुनः प्रयास। यदि कोई कार्य त्रुटि के साथ समाप्त होता है, तो कतार निर्दिष्ट अंतराल के बाद स्वचालित रूप से इसे दोहराएगी।
- अनुसूचन। आप किसी कार्य के निष्पादन को एक निश्चित समय (जैसे, 1 घंटे बाद) के लिए स्थगित कर सकते हैं।
- स्केलिंग। कई वर्कर एक ही कतार से समानांतर रूप से कार्यों को संसाधित कर सकते हैं।
1. Bull — आधुनिक और उच्च-प्रदर्शन कतार
Bull Node.js में कतारों के साथ काम करने के लिए सबसे लोकप्रिय लाइब्रेरीज़ में से एक है। यह Redis पर आधारित है और कार्य प्रबंधन के लिए एक समृद्ध API प्रदान करता है।
Bull की मुख्य क्षमताएं:
- कार्य प्राथमिकताओं के लिए समर्थन।
- अनुकूलन योग्य पुनः प्रयास (retries)।
- विलंबित प्रारंभ (delay)।
- ईवेंट (कार्य पूर्ण, त्रुटि, प्रगति)।
bull-boardके माध्यम से निगरानी के लिए अंतर्निहित UI इंटरफ़ेस।
स्थापना:
npm install bullकतार और हैंडलर बनाने का उदाहरण:
const Queue = require('bull');
// ईमेल भेजने के लिए कतार बनाएँconst emailQueue = new Queue('email', { redis: { host: '127.0.0.1', port: 6379 }});
// कतार में कार्य जोड़ेंemailQueue.add({ to: 'user@example.com', subject: 'नमस्ते!', body: 'यह एक परीक्षण ईमेल है'}, { attempts: 3, // त्रुटि पर 3 बार तक दोहराएँ delay: 5000 // 5 सेकंड के लिए विलंब});
// कार्य हैंडलरemailQueue.process(async (job) => { const { to, subject, body } = job.data; // ईमेल भेजने का अनुकरण await sendEmail(to, subject, body); console.log(`ईमेल भेजा गया: ${to}`);});Bull कब चुनें: यदि आपको उन्नत सुविधाओं (प्राथमिकताएं, पुनः प्रयास, निगरानी) के साथ एक विश्वसनीय कतार की आवश्यकता है और आप Redis का उपयोग करने को तैयार हैं।
2. Bee-Queue — हल्का और तेज़
Bee-Queue एक न्यूनतम कतार है, जो Redis पर भी काम करती है। यह सादगी और प्रदर्शन पर केंद्रित है। लाइब्रेरी का कोड कॉम्पैक्ट है, API सहज है।
Bee-Queue की विशेषताएं:
- Redis के अलावा कोई निर्भरता नहीं।
- ईवेंट के लिए समर्थन (ready, job succeeded, job failed)।
- प्रसंस्करण टाइमआउट सेट करने की क्षमता।
- सरल पुनः प्रयास प्रणाली।
स्थापना:
npm install bee-queueउपयोग का उदाहरण:
const Queue = require('bee-queue');
const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }});
// कार्य जोड़ेंimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }) .retries(2) .save();
// हैंडलरimageQueue.process(async (job) => { const {