TypeScript के लिए कार्य कतारें: Bull और Bee-Queue के लिए पूर्ण गाइड
TypeScript में आधुनिक वेब एप्लिकेशन विकसित करते समय, मुख्य थ्रेड को ब्लॉक किए बिना लंबी या संसाधन-गहन संचालन को एसिंक्रोनस रूप से निष्पादित करने की आवश्यकता अक्सर उत्पन्न होती है। उदाहरण के लिए: ईमेल सूचनाएं भेजना, PDF रिपोर्ट तैयार करना, इमेज प्रोसेसिंग या बाहरी API के साथ सिंक्रोनाइज़ेशन। इन समस्याओं को हल करने के लिए कार्य कतारों (job queues) का उपयोग किया जाता है। इस लेख में, हम TypeScript के लिए दो सबसे लोकप्रिय लाइब्रेरीज़ — Bull और Bee-Queue पर विस्तार से चर्चा करेंगे, और यह भी देखेंगे कि उन्हें आपके प्रोजेक्ट में कैसे एकीकृत किया जाए।
कार्य कतारों की आवश्यकता क्यों है?
कार्य कतार निम्नलिखित की अनुमति देती है:
- जिम्मेदारी को विभाजित करना — मुख्य सेवा केवल कार्य को सेट करने के लिए जिम्मेदार है, जबकि हैंडलर इसके निष्पादन के लिए जिम्मेदार है।
- लोड प्रबंधित करना — समानांतर कार्यों (concurrency) की संख्या को सीमित किया जा सकता है।
- डिलीवरी की गारंटी देना — प्रक्रिया क्रैश होने पर भी कार्य खो नहीं जाते (Redis के कारण)।
- निष्पादन की योजना बनाना — किसी कार्य को एक निश्चित समय के लिए विलंबित करना या शेड्यूल के अनुसार दोहराना।
- त्रुटियों को संभालना — एक्सपोनेंशियल बैकऑफ़ के साथ स्वचालित पुनः प्रयास (retry)।
Bull — Node.js और TypeScript के लिए सबसे लोकप्रिय कतार
Bull Redis पर आधारित एक शक्तिशाली लाइब्रेरी है, जो सुविधाओं का पूरा सेट प्रदान करती है: प्राथमिकताएं, पुनः प्रयास, विलंब, विराम, ईवेंट और मॉनिटरिंग। Bull में TypeScript के लिए उत्कृष्ट टाइपिंग है।
स्थापना और कॉन्फ़िगरेशन
npm install bull @types/bullईमेल भेजने के लिए एक सरल कतार उदाहरण:
import Queue from 'bull';
interface EmailJob { to: string; subject: string; body: string;}
// 'email' नाम से एक कतार बनाएँconst emailQueue = new Queue<EmailJob>('email', { redis: { host: 'localhost', port: 6379 }, defaultJobOptions: { attempts: 3, // अधिकतम 3 प्रयास backoff: { type: 'exponential', delay: 2000 }, removeOnComplete: true, }});
// हैंडलर — बैकग्राउंड में निष्पादित होता हैemailQueue.process(async (job) => { console.log(`ईमेल भेजा जा रहा है ${job.data.to} को`); // भेजने का अनुकरण await new Promise(resolve => setTimeout(resolve, 1000)); console.log(`ईमेल भेजा गया: ${job.data.subject}`);});
// कार्य जोड़ेंasync function addEmail() { await emailQueue.add({ to: 'user@example.com', subject: 'कतार से नमस्ते!', body: 'यह एक परीक्षण ईमेल है।', });}
addEmail();Bull की उन्नत सुविधाएं
- दोहराए जाने वाले कार्य (cron):
queue.add(data, { repeat: { cron: '0 8 * * *' } }) - प्राथमिकताएं:
queue.add(data, { priority: 1 })— संख्या जितनी छोटी, प्राथमिकता उतनी अधिक। - निष्पादन में विलंब:
queue.add(data, { delay: 60000 })— 1 मिनट के लिए विलंबित करें। - ईवेंट:
completed,failed,progressऔर अन्य पर सब्सक्राइब किया जा सकता है। - विराम/पुनः आरंभ:
queue.pause()/queue.resume()।
// ईवेंट हैंडलिंगemailQueue.on('completed', (job, result) => { console.log(`कार्य ${job.id} पूरा हुआ`);});
emailQueue.on('failed', (job, err) => { console.error(`कार्य ${job.id} विफल: ${err.message}`);});Bee-Queue — एक हल्का विकल्प
Bee-Queue Redis पर एक न्यूनतम कतार है, जो मेमोरी खपत के मामले में Bull से सरल और तेज़ है। यह छोटे प्रोजेक्ट्स या उन मामलों के लिए उपयुक्त है जहां जटिल कॉन्फ़िगरेशन की आवश्यकता नहीं है।
स्थापना और उदाहरण
npm install bee-queueimport Bee from 'bee