परिचय: आपका सर्वर क्यों सो रहा है जबकि उसे काम करना चाहिए
\n\nकल्पना करें: उपयोगकर्ता "रिपोर्ट भेजें" बटन दबाता है, और पेज 30 सेकंड के लिए हैंग हो जाता है। सर्वर PDF जनरेट कर रहा है, इमेज को कंप्रेस कर रहा है और ईमेल भेज रहा है - सब कुछ सिंक्रोनसली। परिचित लग रहा है? अगर हाँ, तो आप ब्लॉकिंग कोड के जाल में फंस गए हैं।
\n\nइस लेख में, हम देखेंगे कि कैसे TypeScript में कतारें और बैकग्राउंड टास्क इस समस्या को हल करते हैं। आप सीखेंगे कि भारी काम को बैकग्राउंड प्रोसेस में कैसे शिफ्ट करें, बिना एरर कंट्रोल और स्केलेबिलिटी खोए। यह सामग्री उन डेवलपर्स के लिए है जो Node.js से परिचित हैं और अपने प्रोजेक्ट को अगले स्तर पर ले जाना चाहते हैं।
\n\nहम Bull और BullMQ लाइब्रेरी के बारे में बात करेंगे, RabbitMQ को छूएंगे, और TypeScript में वास्तविक कोड उदाहरण दिखाएंगे। चलिए शुरू करते हैं!
टास्क कतार क्या है और इसकी आवश्यकता क्यों है
\n\nटास्क कतार (task queue) एक ऐसा तंत्र है जो उपयोगकर्ता के अनुरोध को उसके निष्पादन से अलग करता है। HTTP हैंडलर में सीधे ऑपरेशन प्रोसेस करने के बजाय, हम कार्य को कतार में भेजते हैं, और एक बैकग्राउंड वर्कर इसे लेकर एसिंक्रोनसली निष्पादित करता है।
\n\nसामान्य उपयोग के परिदृश्य
\n- \n
- ईमेल और push नोटिफिकेशन भेजना \n
- PDF, इमेज, वीडियो जनरेट करना \n
- डेटा पार्सिंग और वेब स्क्रैपिंग \n
- ई-कॉमर्स साइटों पर ऑर्डर प्रोसेसिंग \n
- बल्क कैलकुलेशन और रिपोर्ट \n
कतारों के बिना, आपका एप्लिकेशन लोड के तहत क्रैश हो सकता है। कतारों के साथ, आपको फॉल्ट टॉलरेंस (अगर वर्कर क्रैश होता है, तो कार्य खोता नहीं) और स्केलेबिलिटी (एक के बजाय 10 वर्कर चला सकते हैं) मिलता है।
\n\nBull और BullMQ: Node.js के लिए शक्तिशाली कतारें
\n\nBull Node.js इकोसिस्टम में कतारों के लिए सबसे लोकप्रिय लाइब्रेरी है। यह Redis पर आधारित है और आउट-ऑफ-द-बॉक्स TypeScript सपोर्ट करती है। BullMQ इसका उत्तराधिकारी है, जो अधिक आधुनिक है, सैंडबॉक्स (आइसोलेटेड प्रोसेस) और एडवांस्ड मैनेजमेंट के साथ आता है।
\n\nइंस्टॉलेशन और बेसिक सेटअप
\nnpm install bullmq ioredis\nnpm install -D @types/bull\n\nTypeScript में कतार और वर्कर बनाएं:
\n\n// queue.ts\nimport { Queue } from 'bullmq';\n\nconst connection = {\n host: 'localhost',\n port: 6379,\n};\n\nexport const emailQueue = new Queue('email', { connection });\n\n// worker.ts\nimport { Worker } from 'bullmq';\nimport { sendEmail } from './emailService';\n\nconst worker = new Worker('email', async job => {\n const { to, subject, body } = job.data;\n await sendEmail(to, subject, body);\n console.log(`Email sent to ${to}`);\n}, { connection });\n\nworker.on('completed', job => {\n console.log(`Job ${job.id} completed`);\n});\n\nworker.on('failed', (job, err) => {\n console.error(`Job ${job.id} failed: ${err.message}`);\n});\n\nअब एप्लिकेशन में कहीं से भी कार्य जोड़ें:
\n\nimport { emailQueue } from './queue';\n\nawait emailQueue.add('send-welcome', {\n to: 'user@example.com',\n subject: 'स्वागत है!',\n body: 'पंजीकरण के लिए धन्यवाद...'\n});\n\nसरल है, है ना? लेकिन यह तो बस शुरुआत है। BullMQ और भी अधिक क्षमताएं देता है।
\n\nBullMQ की उन्नत सुविधाएं
\n- \n
- पुनः प्रयास — अगर कार्य विफल होता है, तो इसे N सेकंड बाद ऑटोमैटिकली रीस्टार्ट किया जा सकता है। \n
- निष्पादन में देरी — कार्य को एक निश्चित समय के लिए टालें। \n
- प्राथमिकताएं — अत्यावश्यक कार्य पहले प्रोसेस होते हैं। \n
- ईवेंट — प्रोग्रेस, पूर्णता, त्रुटियों पर सब्सक्राइब करें। \n
- सैंडबॉक्स — आइसोलेटेड प्रोसेस में कोड निष्पादित करें (सुरक्षा + सफाई)। \n
पुनः प्रयास और देरी के साथ उदाहरण:
\n\nawait emailQueue.add('send-invoice', {\n invoiceId: 123,\n email: 'client@example.com'\n}, {\n attempts: 5,\n backoff: { type: 'expon