TypeScript में कतारें और बैकग्राउंड टास्क: प्रोडक्शन को क्रैश होने से बचाएं

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

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

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

परिचय: आपका सर्वर क्यों सो रहा है जबकि उसे काम करना चाहिए

\n\n

कल्पना करें: उपयोगकर्ता "रिपोर्ट भेजें" बटन दबाता है, और पेज 30 सेकंड के लिए हैंग हो जाता है। सर्वर PDF जनरेट कर रहा है, इमेज को कंप्रेस कर रहा है और ईमेल भेज रहा है - सब कुछ सिंक्रोनसली। परिचित लग रहा है? अगर हाँ, तो आप ब्लॉकिंग कोड के जाल में फंस गए हैं।

\n\n

इस लेख में, हम देखेंगे कि कैसे TypeScript में कतारें और बैकग्राउंड टास्क इस समस्या को हल करते हैं। आप सीखेंगे कि भारी काम को बैकग्राउंड प्रोसेस में कैसे शिफ्ट करें, बिना एरर कंट्रोल और स्केलेबिलिटी खोए। यह सामग्री उन डेवलपर्स के लिए है जो Node.js से परिचित हैं और अपने प्रोजेक्ट को अगले स्तर पर ले जाना चाहते हैं।

\n\n

हम Bull और BullMQ लाइब्रेरी के बारे में बात करेंगे, RabbitMQ को छूएंगे, और TypeScript में वास्तविक कोड उदाहरण दिखाएंगे। चलिए शुरू करते हैं!

\n\n

टास्क कतार क्या है और इसकी आवश्यकता क्यों है

\n\n

टास्क कतार (task queue) एक ऐसा तंत्र है जो उपयोगकर्ता के अनुरोध को उसके निष्पादन से अलग करता है। HTTP हैंडलर में सीधे ऑपरेशन प्रोसेस करने के बजाय, हम कार्य को कतार में भेजते हैं, और एक बैकग्राउंड वर्कर इसे लेकर एसिंक्रोनसली निष्पादित करता है।

\n\n

सामान्य उपयोग के परिदृश्य

\n
    \n
  • ईमेल और push नोटिफिकेशन भेजना
  • \n
  • PDF, इमेज, वीडियो जनरेट करना
  • \n
  • डेटा पार्सिंग और वेब स्क्रैपिंग
  • \n
  • ई-कॉमर्स साइटों पर ऑर्डर प्रोसेसिंग
  • \n
  • बल्क कैलकुलेशन और रिपोर्ट
  • \n
\n\n

कतारों के बिना, आपका एप्लिकेशन लोड के तहत क्रैश हो सकता है। कतारों के साथ, आपको फॉल्ट टॉलरेंस (अगर वर्कर क्रैश होता है, तो कार्य खोता नहीं) और स्केलेबिलिटी (एक के बजाय 10 वर्कर चला सकते हैं) मिलता है।

\n\n

Bull और BullMQ: Node.js के लिए शक्तिशाली कतारें

\n\n

Bull Node.js इकोसिस्टम में कतारों के लिए सबसे लोकप्रिय लाइब्रेरी है। यह Redis पर आधारित है और आउट-ऑफ-द-बॉक्स TypeScript सपोर्ट करती है। BullMQ इसका उत्तराधिकारी है, जो अधिक आधुनिक है, सैंडबॉक्स (आइसोलेटेड प्रोसेस) और एडवांस्ड मैनेजमेंट के साथ आता है।

\n\n

इंस्टॉलेशन और बेसिक सेटअप

\n
npm install bullmq ioredis\nnpm install -D @types/bull
\n\n

TypeScript में कतार और वर्कर बनाएं:

\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\n
import { emailQueue } from './queue';\n\nawait emailQueue.add('send-welcome', {\n  to: 'user@example.com',\n  subject: 'स्वागत है!',\n  body: 'पंजीकरण के लिए धन्यवाद...'\n});
\n\n

सरल है, है ना? लेकिन यह तो बस शुरुआत है। BullMQ और भी अधिक क्षमताएं देता है।

\n\n

BullMQ की उन्नत सुविधाएं

\n
    \n
  • पुनः प्रयास — अगर कार्य विफल होता है, तो इसे N सेकंड बाद ऑटोमैटिकली रीस्टार्ट किया जा सकता है।
  • \n
  • निष्पादन में देरी — कार्य को एक निश्चित समय के लिए टालें।
  • \n
  • प्राथमिकताएं — अत्यावश्यक कार्य पहले प्रोसेस होते हैं।
  • \n
  • ईवेंट — प्रोग्रेस, पूर्णता, त्रुटियों पर सब्सक्राइब करें।
  • \n
  • सैंडबॉक्स — आइसोलेटेड प्रोसेस में कोड निष्पादित करें (सुरक्षा + सफाई)।
  • \n
\n\n

पुनः प्रयास और देरी के साथ उदाहरण:

\n\n
await emailQueue.add('send-invoice', {\n  invoiceId: 123,\n  email: 'client@example.com'\n}, {\n  attempts: 5,\n  backoff: { type: 'expon                

ब्लॉग

पुस्तक अनुशंसाएँ