Bull JavaScript (Node.js) पूरी गाइड: उदाहरण और उपयोग

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

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

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

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

Bull एक शक्तिशाली और लोकप्रिय लाइब्रेरी है जो Node.js में टास्क क्यू (job queues) को मैनेज करने के लिए उपयोग की जाती है। यह Redis के ऊपर बनी है और बैकग्राउंड टास्क को प्रोसेस करने का एक विश्वसनीय, स्केलेबल और लचीला तरीका प्रदान करती है। अगर आपके एप्लिकेशन को ऐसे ऑपरेशन करने हैं जो मुख्य थ्रेड को ब्लॉक नहीं करने चाहिए (जैसे ईमेल भेजना, इमेज प्रोसेसिंग, PDF जनरेट करना, बाहरी API से सिंक करना, डेटा पार्स करना), तो Bull एक आदर्श समाधान है।

Bull का उपयोग क्यों करें?

  • एसिंक्रोनस प्रोसेसिंग: भारी टास्क को बैकग्राउंड प्रोसेस में ले जाकर मुख्य सर्वर को हल्का रखता है।
  • विश्वसनीयता: टास्क Redis में स्टोर होते हैं, इसलिए एप्लिकेशन रीस्टार्ट या वर्कर क्रैश होने पर भी डेटा नहीं खोता।
  • रीट्राई: एरर होने पर ऑटोमैटिक रीट्राई की सुविधा बिल्ट-इन है।
  • शेड्यूलिंग: टास्क को देरी से चलाने या क्रॉन (cron) शेड्यूल पर चलाने की सुविधा।
  • प्राथमिकता: टास्क के एक्जीक्यूशन ऑर्डर को कंट्रोल करना।
  • मॉनिटरिंग: बिल्ट-इन UI (Bull Board) की मदद से क्यू की स्थिति आसानी से ट्रैक करें।

Bull की इंस्टॉलेशन

शुरू करने से पहले सुनिश्चित करें कि Redis इंस्टॉल और रनिंग है। Bull इसके बिना काम नहीं करता।

  1. Redis इंस्टॉल करें (Ubuntu/Debian के लिए उदाहरण):
    sudo apt update
    sudo apt install redis-server
    sudo systemctl start redis
  2. npm के ज़रिए Bull इंस्टॉल करें:
    npm install bull
  3. Bull Board इंस्टॉल करें (वैकल्पिक, वेब इंटरफ़ेस के लिए):
    npm install @bull-board/express @bull-board/api

त्वरित शुरुआत: पहला उदाहरण

चलिए वेलकम ईमेल भेजने के लिए एक सरल क्यू बनाते हैं।

चरण 1: प्रोड्यूसर बनाएं (producer.js)

const Queue = require('bull');

// 'emailQueue' नाम से एक क्यू बनाएं
const emailQueue = new Queue('emailQueue', {
    redis: { host: 'localhost', port: 6379 }
});

// क्यू में टास्क जोड़ने का फंक्शन
async function addEmailJob(to, subject, body) {
    const job = await emailQueue.add(
        { to, subject, body }, // टास्क का डेटा
        {
            attempts: 3, // एरर होने पर प्रयासों की संख्या
            backoff: { type: 'fixed', delay: 5000 } // प्रयासों के बीच देरी (5 सेकंड)
        }
    );
    console.log(`टास्क ID के साथ जोड़ा गया: ${job.id}`);
    return job;
}

// उपयोग का उदाहरण
addEmailJob('user@example.com', 'स्वागत है!', 'पंजीकरण के लिए धन्यवाद.')
    .then(() => process.exit(0))
    .catch(err => console.error(err));

चरण 2: वर्कर बनाएं (worker.js)

const Queue = require('bull');

// उसी क्यू से कनेक्ट करें
const emailQueue = new Queue('emailQueue', {
    redis: { host: 'localhost', port: 6379 }
});

// टास्क हैंडलर
emailQueue.process(async (job) => {
    console.log(`टास्क ${job.id} प्रोसेस हो रहा है...`);
    const { to, subject, body } = job.data;

    // ईमेल भेजने का सिमुलेशन (असल में nodemailer का उपयोग करें)
    await new Promise(resolve => setTimeout(resolve, 2000));
    console.log(`ईमेल ${to} पर भेजा गया: ${subject}`);

    // अगर कुछ गलत होता है, तो एरर थ्रो करें
    // throw new Error('भेजने में त्रुटि');
});

console.log('वर्कर शुरू हो गया है और टास्क का इंतज़ार कर रहा है...');

चरण 3: चलाएं

पहले वर्कर चलाएं: node worker.js। फिर दूसरे टर्मिनल में प्रोड्यूसर चलाएं: node producer.js। आप देखेंगे कि टास्क क्यू में जुड़ता है और प्रोसेस होता है।

Bull के मुख्य तरीके और फंक्शन

1. new Queue(name, [options]) — क्यू बनाना

यह क्या करता है: क्यू का एक नया इंस्टेंस बनाता है। अगर इस नाम की क्यू पहले से Redis में मौजूद है, तो यह उससे कनेक्ट हो जाता है।

अनुशंसाएँ