TypeScript के लिए कार्य कतारें: Bull, Agenda और Bee-Queue
\n\nआधुनिक TypeScript वेब अनुप्रयोगों में, मुख्य थ्रेड को अवरुद्ध किए बिना, संसाधन-गहन या लंबी अवधि के संचालन को अतुल्यकालिक रूप से निष्पादित करने की आवश्यकता अक्सर उत्पन्न होती है। कार्य कतारें (Job Queues) एक सिद्ध आर्किटेक्चरल पैटर्न है जो कार्यों के निष्पादन को स्थगित करने, वर्कर्स के बीच लोड वितरित करने और प्रसंस्करण की विश्वसनीयता सुनिश्चित करने की अनुमति देता है। इस लेख में, हम TypeScript के लिए तीन लोकप्रिय टूल्स पर विचार करेंगे: Bull, Agenda और Bee-Queue। आप सीखेंगे कि उन्हें अपने प्रोजेक्ट में कैसे एकीकृत करें, उनकी ताकत क्या है, और विशिष्ट परिदृश्यों के लिए कौन सा टूल चुनना है।
\n\n1. Bull — Redis पर आधारित शक्तिशाली कतार
\n\nBull Node.js/TypeScript में कार्य कतारों के प्रबंधन के लिए शायद सबसे लोकप्रिय लाइब्रेरी है। यह बैकएंड के रूप में Redis का उपयोग करता है, जो उच्च प्रदर्शन और विफलताओं के प्रति लचीलापन सुनिश्चित करता है। Bull कार्य प्राथमिकताओं, पुनः प्रयासों, विलंबों, साथ ही रुकने और फिर से शुरू होने वाली कतारों के जटिल परिदृश्यों का समर्थन करता है।
\n\nस्थापना:
\nnpm install bull\nnpm install @types/bull // TypeScript के लिए\n\nसरल producer-consumer का उदाहरण:
\nimport 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\nBull bull-board या bull-repl के माध्यम से सुविधाजनक UI-मॉनिटरिंग भी प्रदान करता है, जो प्रोडक्शन में डिबगिंग को सरल बनाता है।
2. Agenda — शेड्यूल समर्थन के साथ लचीली कतार
\n\nAgenda एक लाइब्रेरी है जो भंडारण के रूप में MongoDB का उपयोग करती है। इसकी मुख्य विशेषता आवधिक कार्यों (cron-जैसे शेड्यूल) के लिए अंतर्निहित समर्थन और आवर्ती कार्यों को परिभाषित करने के लिए सुविधाजनक API है। Agenda उन कार्यों के लिए उपयुक्त है जिन्हें शेड्यूल पर निष्पादित किया जाना चाहिए: डेटाबेस सफाई, रिपोर्ट जनरेशन, डाइजेस्ट भेजना।
\n\nस्थापना:
\nnpm install agenda\nnpm install @types/agenda\n\nशेड्यूल के साथ उपयोग का उदाहरण:
\nimport 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\nAgenda प्राथमिकताओं, पुनः प्रयासों और graceful shutdown का समर्थन करता है। हालाँकि, Redis के बजाय MongoDB के उपयोग के कारण यह Bull की तुलना में कम प्रदर्शनकारी है।
\n\n3. Bee-Queue — हल्की और तेज़ कतार
\n\nBee-Queue Redis पर एक न्यूनतम कतार है, जो अधिकतम प्रदर्शन और छोटे कोड आकार पर केंद्रित है। यह प्राथमिकताओं या शेड्यूल जैसी जटिल सुविधाओं का समर्थन नहीं करता है, लेकिन सरल परिदृश्यों के लिए आदर्श है जहाँ गति और कम मेमोरी खपत महत्वपूर्ण है।
\n\nस्थापना:
\nnpm install bee-queue\nnpm install @types/bee-queue\n\nकार्य का उदाहरण:
\nimport Bee from 'bee-queue';\n\nconst imageQueue = new Bee('image-processing', {\n redis: { host: 'localhost', port: 6379 }\n});\n\n// Producer\nimageQueue.createJob({ पुस्तकालय में भी
Go एप्लिकेशन का कॉन्फ़िगरेशन: viper लाइब्रेरी
Go (Golang) में HTML पार्सिंग: लाइब्रेरीज़ और कोड उदाहरण
C++ में Markdown के साथ काम करना: md4c, cmark और cpp-markdown लाइब्रेरीज़
PHP में CSV के साथ कार्य: डेटा पढ़ना, लिखना और प्रसंस्करण
Swift में JSON प्रोसेसिंग: iOS/macOS के लिए Codable, Foundation और SwiftyJSON