TypeScript के लिए कार्य कतारें: Bull, Agenda, और Bee-Queue

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

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

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

TypeScript के लिए कार्य कतारें: Bull, Agenda और Bee-Queue

\n\n

आधुनिक TypeScript वेब अनुप्रयोगों में, मुख्य थ्रेड को अवरुद्ध किए बिना, संसाधन-गहन या लंबी अवधि के संचालन को अतुल्यकालिक रूप से निष्पादित करने की आवश्यकता अक्सर उत्पन्न होती है। कार्य कतारें (Job Queues) एक सिद्ध आर्किटेक्चरल पैटर्न है जो कार्यों के निष्पादन को स्थगित करने, वर्कर्स के बीच लोड वितरित करने और प्रसंस्करण की विश्वसनीयता सुनिश्चित करने की अनुमति देता है। इस लेख में, हम TypeScript के लिए तीन लोकप्रिय टूल्स पर विचार करेंगे: Bull, Agenda और Bee-Queue। आप सीखेंगे कि उन्हें अपने प्रोजेक्ट में कैसे एकीकृत करें, उनकी ताकत क्या है, और विशिष्ट परिदृश्यों के लिए कौन सा टूल चुनना है।

\n\n

1. Bull — Redis पर आधारित शक्तिशाली कतार

\n\n

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

\n\n

स्थापना:

\n
npm install bull\nnpm install @types/bull  // TypeScript के लिए
\n\n

सरल producer-consumer का उदाहरण:

\n
import Queue from 'bull';\n\n// 'email' नाम से एक कतार बनाएँ\nconst emailQueue = new Queue('email', {\n  redis: { host: 'localhost', port: 6379 }\n});\n\n// Producer: एक कार्य जोड़ें\nasync function sendWelcomeEmail(userId: string) {\n  await emailQueue.add(\n    { userId, type: 'welcome' },\n    { attempts: 3, backoff: 2000 }  // 2 सेकंड के अंतराल के साथ 3 प्रयास\n  );\n}\n\n// Consumer: कार्य को संसाधित करें\nemailQueue.process(async (job) => {\n  const { userId, type } = job.data;\n  console.log(`उपयोगकर्ता ${userId} को ${type} ईमेल भेजा जा रहा है`);\n  // यहाँ ईमेल भेजने का तर्क\n});
\n\n

Bull bull-board या bull-repl के माध्यम से सुविधाजनक UI-मॉनिटरिंग भी प्रदान करता है, जो प्रोडक्शन में डिबगिंग को सरल बनाता है।

\n\n

2. Agenda — शेड्यूल समर्थन के साथ लचीली कतार

\n\n

Agenda एक लाइब्रेरी है जो भंडारण के रूप में MongoDB का उपयोग करती है। इसकी मुख्य विशेषता आवधिक कार्यों (cron-जैसे शेड्यूल) के लिए अंतर्निहित समर्थन और आवर्ती कार्यों को परिभाषित करने के लिए सुविधाजनक API है। Agenda उन कार्यों के लिए उपयुक्त है जिन्हें शेड्यूल पर निष्पादित किया जाना चाहिए: डेटाबेस सफाई, रिपोर्ट जनरेशन, डाइजेस्ट भेजना।

\n\n

स्थापना:

\n
npm install agenda\nnpm install @types/agenda
\n\n

शेड्यूल के साथ उपयोग का उदाहरण:

\n
import Agenda from 'agenda';\n\nconst agenda = new Agenda({\n  db: { address: 'mongodb://localhost:27017/agenda-example' }\n});\n\n// एक कार्य परिभाषित करें\nagenda.define('send weekly report', async (job) => {\n  const { department } = job.attrs.data;\n  console.log(`विभाग ${department} के लिए साप्ताहिक रिपोर्ट तैयार की जा रही है`);\n});\n\n// एजेंट शुरू करें और कार्य शेड्यूल करें\n(async () => {\n  await agenda.start();\n  // प्रत्येक शुक्रवार को 18:00 बजे निष्पादित करें\n  await agenda.every('0 18 * * 5', 'send weekly report', { department: 'IT' });\n})();
\n\n

Agenda प्राथमिकताओं, पुनः प्रयासों और graceful shutdown का समर्थन करता है। हालाँकि, Redis के बजाय MongoDB के उपयोग के कारण यह Bull की तुलना में कम प्रदर्शनकारी है।

\n\n

3. Bee-Queue — हल्की और तेज़ कतार

\n\n

Bee-Queue Redis पर एक न्यूनतम कतार है, जो अधिकतम प्रदर्शन और छोटे कोड आकार पर केंद्रित है। यह प्राथमिकताओं या शेड्यूल जैसी जटिल सुविधाओं का समर्थन नहीं करता है, लेकिन सरल परिदृश्यों के लिए आदर्श है जहाँ गति और कम मेमोरी खपत महत्वपूर्ण है।

\n\n

स्थापना:

\n
npm install bee-queue\nnpm install @types/bee-queue
\n\n

कार्य का उदाहरण:

\n
import Bee from 'bee-queue';\n\nconst imageQueue = new Bee('image-processing', {\n  redis: { host: 'localhost', port: 6379 }\n});\n\n// Producer\nimageQueue.createJob({                    

अनुशंसाएँ