Bull für JavaScript (Node.js): Komplettguide mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Bull und warum braucht man es?

Bull ist eine leistungsstarke und beliebte Bibliothek zur Verwaltung von Aufgaben-Warteschlangen (Job Queues) in der Node.js-Umgebung. Es basiert auf Redis und bietet eine zuverlässige, skalierbare und flexible Möglichkeit zur Verarbeitung von Hintergrundaufgaben. Wenn Ihre Anwendung Vorgänge ausführen muss, die den Hauptthread nicht blockieren sollen (z. B. E-Mail-Versand, Bildverarbeitung, PDF-Generierung, Synchronisierung mit externen APIs, Daten-Parsing), ist Bull die ideale Lösung.

Warum Bull verwenden?

  • Asynchrone Verarbeitung: Entlastet den Hauptserver, indem schwere Aufgaben in Hintergrundprozesse ausgelagert werden.
  • Zuverlässigkeit: Aufgaben werden in Redis gespeichert, sodass sie bei einem Neustart der Anwendung oder einem Worker-Ausfall nicht verloren gehen.
  • Wiederholungsversuche: Integrierte Unterstützung für automatische Wiederholungsversuche bei Fehlern.
  • Planung: Möglichkeit, Aufgaben zu verzögern oder nach einem Zeitplan (Cron) auszuführen.
  • Prioritäten: Steuerung der Ausführungsreihenfolge von Aufgaben.
  • Monitoring: Einfache Überwachung des Warteschlangenstatus mit der integrierten UI (Bull Board).

Installation von Bull

Stellen Sie zunächst sicher, dass Redis installiert und gestartet ist. Bull funktioniert nicht ohne Redis.

  1. Redis-Installation (Beispiel für Ubuntu/Debian):
    sudo apt update
    sudo apt install redis-server
    sudo systemctl start redis
  2. Bull-Installation mit npm:
    npm install bull
  3. Bull Board-Installation (optional, für die Weboberfläche):
    npm install @bull-board/express @bull-board/api

Schnellstart: Erstes Beispiel

Erstellen wir eine einfache Warteschlange zum Versenden von Begrüßungs-E-Mails.

Schritt 1: Producer erstellen (producer.js)

const Queue = require('bull');

// Warteschlange mit dem Namen 'emailQueue' erstellen
const emailQueue = new Queue('emailQueue', {
    redis: { host: 'localhost', port: 6379 }
});

// Funktion zum Hinzufügen einer Aufgabe zur Warteschlange
async function addEmailJob(to, subject, body) {
    const job = await emailQueue.add(
        { to, subject, body }, // Aufgabendaten
        {
            attempts: 3, // Anzahl der Wiederholungsversuche bei Fehlern
            backoff: { type: 'fixed', delay: 5000 } // Verzögerung zwischen Versuchen (5 Sek.)
        }
    );
    console.log(`Aufgabe hinzugefügt mit ID: ${job.id}`);
    return job;
}

// Beispielaufruf
addEmailJob('user@example.com', 'Willkommen!', 'Vielen Dank für Ihre Registrierung.')
    .then(() => process.exit(0))
    .catch(err => console.error(err));

Schritt 2: Worker erstellen (worker.js)

const Queue = require('bull');

// Verbindung zur gleichen Warteschlange herstellen
const emailQueue = new Queue('emailQueue', {
    redis: { host: 'localhost', port: 6379 }
});

// Aufgaben-Handler
emailQueue.process(async (job) => {
    console.log(`Verarbeite Aufgabe ${job.id}...`);
    const { to, subject, body } = job.data;

    // E-Mail-Versand simulieren (in der Praxis nodemailer verwenden)
    await new Promise(resolve => setTimeout(resolve, 2000));
    console.log(`E-Mail gesendet an ${to}: ${subject}`);

    // Bei einem Fehler werfen Sie einen Fehler
    // throw new Error('Fehler beim Senden');
});

console.log('Worker gestartet und wartet auf Aufgaben...');

Schritt 3: Ausführen

Starten Sie zuerst den Worker: node worker.js. Öffnen Sie dann ein zweites Terminal und starten Sie den Producer: node producer.js. Sie werden sehen, wie die Aufgabe in die Warteschlange eingereiht und verarbeitet wird.

Wichtige Methoden und Funktionen von Bull

1. new Queue(name, [options]) — Warteschlange erstellen

Funktion: Erstellt eine neue Warteschlangeninstanz. Wenn bereits eine Warteschlange mit diesem Namen in Redis existiert, wird eine Verbindung zu ihr hergestellt.

Empfehlungen