JavaScript (Node.js) के लिए कार्य कतारें: Bull, Bee-Queue और Kue
\n\nNode.js पर वेब एप्लिकेशन विकसित करते समय, HTTP अनुरोधों के मुख्य प्रवाह के बाहर संसाधन-गहन या लंबी अवधि के संचालन करने की आवश्यकता अक्सर उत्पन्न होती है। ईमेल न्यूज़लेटर भेजना, PDF रिपोर्ट तैयार करना, अपलोड की गई छवियों को संसाधित करना या बाहरी API के साथ इंटरैक्ट करना - ये सभी कार्य उपयोगकर्ता को प्रतिक्रिया को अवरुद्ध कर सकते हैं यदि उन्हें समकालिक रूप से निष्पादित किया जाए। इस समस्या को हल करने के लिए कार्य कतारों (job queues) का उपयोग किया जाता है।
\n\nकार्य कतार एक तंत्र है जो अनुमति देता है:
\n- \n
- कार्य को पृष्ठभूमि में करने में विलंब करना। \n
- प्राथमिकताओं और प्रसंस्करण क्रम का प्रबंधन करना। \n
- त्रुटियों पर स्वचालित रूप से कार्यों को दोहराना। \n
- प्रसंस्करण को क्षैतिज रूप से स्केल करना (एकाधिक वर्कर)। \n
Node.js पारिस्थितिकी तंत्र में, तीन लाइब्रेरीज़ सबसे लोकप्रिय हैं: Bull, Bee-Queue और Kue। ये सभी Redis के ऊपर बनाई गई हैं, जो उच्च प्रदर्शन और विफलता सहनशीलता सुनिश्चित करता है। आइए उनमें से प्रत्येक पर विस्तार से नज़र डालें।
\n\n\n\n
1. Bull — सबसे लोकप्रिय और सुविधा संपन्न कतार
\n\nBull (npm: bull) एक परिपक्व, अच्छी तरह से प्रलेखित लाइब्रेरी है जो लगभग सभी आवश्यक परिदृश्यों का समर्थन करती है: विलंबित कार्य, अनुसूचित पुनरावृत्ति, प्राथमिकताएँ, दर सीमाएँ, त्रुटि स्टैक और यहाँ तक कि एक दृश्य इंटरफ़ेस (Arete)। Bull समुदाय द्वारा सक्रिय रूप से समर्थित है और production परियोजनाओं के लिए अनुशंसित है।
स्थापना:
\nnpm install bull\n\nएक सरल उदाहरण — कतार और हैंडलर बनाना:
\n\nconst Queue = require('bull');\n\n// 'email' नाम से एक कतार बनाएँ\nconst emailQueue = new Queue('email', {\n redis: { host: 'localhost', port: 6379 }\n});\n\n// एक कार्य (job) जोड़ें\nemailQueue.add({\n to: 'user@example.com',\n subject: 'स्वागत है!',\n body: 'पंजीकरण के लिए धन्यवाद।'\n}, {\n attempts: 3, // त्रुटि पर प्रयास\n backoff: 5000, // प्रयासों के बीच देरी (5 सेकंड)\n delay: 10000 // 10 सेकंड के लिए विलंब\n});\n\n// हैंडलर (वर्कर)\nemailQueue.process(async (job) => {\n const { to, subject, body } = job.data;\n console.log(`${to} को ईमेल भेजा जा रहा है: ${subject}`);\n // यहाँ आपका ईमेल भेजने का फ़ंक्शन कॉल करें\n await sendEmail(to, subject, body);\n});\n\nBull की प्रमुख क्षमताएँ:
\n- \n
- पुनः प्रयास — पुनर्प्रयासों की संख्या और एक्सपोनेंशियल बैकऑफ़ का कॉन्फ़िगरेशन। \n
- अनुसूची (cron) — अनुसूची के अनुसार कार्यों का निष्पादन (जैसे, हर रात)। \n
- प्राथमिकताएँ — उच्च प्राथमिकता वाले कार्य पहले संसाधित होते हैं। \n
- ईवेंट — ईवेंट की सदस्यता (completed, failed, progress)। \n
- Graceful shutdown — कार्य का सही समापन। \n
\n\n
2. Bee-Queue — हल्की और तेज़ कतार
\n\nBee-Queue (npm: bee-queue) Bull का एक न्यूनतम विकल्प है। यह केवल बुनियादी क्षमताएँ प्रदान करता है, लेकिन न्यूनतम ओवरहेड के साथ ऐसा करता है। Bee-Queue सरल परिदृश्यों के लिए आदर्श है जहाँ जटिल सेटिंग्स की आवश्यकता नहीं है, लेकिन गति महत्वपूर्ण है।
स्थापना:
\nnpm install bee-queue\n\nउपयोग का उदाहरण:
\n\nconst Queue = require('bee-queue');\n\nconst imageQueue = new Queue('image-processing', {\n redis: { host: '127.0.0.1', port: 6379 },\n isWorker: true\n});\n\n// एक कार्य जोड़ें\nimageQueue.createJob({ imageId: 123, size: 'thumbnail' })\n .timeout(30000) // 30 सेकंड का टाइमआउट\n .retries(2) // 2 प्रयास\n .save()\n .then(job => console.log('कार्य बनाया गया:', job.id));\n\n// हैंडलर\nimageQueue.process((job, done) => {\n console.log(`छवि संसाधित की जा रही है ${job.data.imageId}`);\n // कार्य निष्पादित करें\n proce