Bull (Aufgabenwarteschlange für Node.js)

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 wird es benötigt?

Bull ist eine der beliebtesten Bibliotheken zur Verwaltung von Aufgabenwarteschlangen (job queues) in der Node.js-Umgebung. Sie basiert auf Redis und ermöglicht die effiziente Verarbeitung von Hintergrundaufgaben, die Lastverteilung zwischen Workern und die Verwaltung von Ausführungsprioritäten. Wenn Ihre Anwendung ressourcenintensive Operationen (E-Mail-Versand, PDF-Generierung, Bildverarbeitung, Daten-Parsing) asynchron ausführen muss, ohne den Hauptanfragen-Thread zu blockieren, ist Bull die ideale Lösung.

Installation

Für die Installation von Bull wird ein bereits laufender Redis-Server benötigt. Die Installation der Bibliothek selbst erfolgt über npm:

npm install bull

Stellen Sie außerdem sicher, dass Redis unter localhost:6379 erreichbar ist, oder geben Sie Ihre eigenen Verbindungsparameter an.

Hauptfunktionen

  • Erstellung einer Warteschlange — es reicht aus, ein Objekt mit dem Namen der Warteschlange zu initialisieren.
  • Hinzufügen von Aufgaben (jobs) — es können beliebige JavaScript-Objekte als Aufgabendaten übergeben werden.
  • Verarbeiter (processors) — eine Funktion, die für jede Aufgabe ausgeführt wird.
  • Wiederholungsversuche (retries) — automatische Wiederholung bei Fehlern.
  • Verzögerungen (delays) — verzögerter Start einer Aufgabe.
  • Prioritäten — Aufgaben mit hoher Priorität werden zuerst verarbeitet.
  • Ereignisse — es können Ereignisse wie Abschluss, Fehler, Fortschritt abgehört werden.
  • Pause/Fortsetzung — vorübergehendes Anhalten der Warteschlange.

Codebeispiel in JavaScript (Node.js)

Ein einfaches Beispiel einer Warteschlange zum E-Mail-Versand:

const Queue = require('bull');

// Erstellen einer Warteschlangeconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');

// Hinzufügen einer AufgabeemailQueue.add({ to: 'user@example.com', subject: 'Hallo!', body: 'Dies ist eine Testnachricht'}, { attempts: 3, // bis zu 3 Versuche bei Fehler delay: 5000 // um 5 Sekunden verzögern});

// AufgabenverarbeiteremailQueue.process(async (job) => { console.log('Sende E-Mail an:', job.data.to); // Hier Aufruf Ihrer E-Mail-Sendefunktion // await sendEmail(job.data); console.log('E-Mail erfolgreich gesendet'); return Promise.resolve();});

// Ereignis bei ErfolgemailQueue.on('completed', (job) => { console.log(`Aufgabe ${job.id} abgeschlossen`);});

// Ereignis bei FehleremailQueue.on('failed', (job, err) => { console.error(`Aufgabe ${job.id} fehlgeschlagen: ${err.message}`);});

Wann Bull verwendet werden sollte

Bull wird für die folgenden Szenarien empfohlen:

  • Hintergrundaufgaben — Versand von Benachrichtigungen, Newslettern, Berichtserstellung.
  • Medienverarbeitung — Bildskalierung, Videokonvertierung.
  • Web scraping — Datensammlung im Hintergrund ohne Blockierung der API.
  • Integrationen mit externen Diensten — Datensynchronisation, Aufruf von Drittanbieter-APIs.
  • Verteilte Verarbeitung — Ausführung mehrerer Worker auf verschiedenen Servern.

Dank der Verwendung von Redis ist die Bull-Warteschlange ausfallsicher: Wenn ein Worker ausfällt, geht die Aufgabe nicht verloren und wird von einem anderen Prozess ausgeführt. Dies macht die Bibliothek zu einer zuverlässigen Wahl für Produktionssysteme.

Empfehlungen