Aufgabenwarteschlangen in Node.js: Bull, Bee-Queue, Kue und Implementierung auf Redis

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

Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue und Kue



Bei der Entwicklung von Webanwendungen mit Node.js besteht häufig die Notwendigkeit, ressourcenintensive oder langwierige Operationen außerhalb des Haupt-Threads der HTTP-Anfrageverarbeitung auszuführen. Das Versenden von E-Mail-Newslettern, das Generieren von PDF-Berichten, das Verarbeiten hochgeladener Bilder oder die Interaktion mit externen APIs – all diese Aufgaben können die Antwort an den Benutzer blockieren, wenn sie synchron ausgeführt werden. Zur Lösung dieses Problems werden Aufgabenwarteschlangen (job queues) verwendet.



Eine Aufgabenwarteschlange ist ein Mechanismus, der Folgendes ermöglicht:

  • Das Auslagern von Arbeit in den Hintergrund.
  • Die Verwaltung von Prioritäten und der Verarbeitungsreihenfolge.
  • Das automatische Wiederholen von Aufgaben bei Fehlern.
  • Die horizontale Skalierung der Verarbeitung (mehrere Worker).


Im Node.js-Ökosystem haben drei Bibliotheken die größte Popularität erlangt: Bull, Bee-Queue und Kue. Alle basieren auf Redis, was hohe Leistung und Ausfallsicherheit gewährleistet. Betrachten wir jede von ihnen im Detail.






1. Bull – die beliebteste und funktionsreichste Warteschlange



Bull (npm: bull) ist eine ausgereifte, gut dokumentierte Bibliothek, die praktisch alle notwendigen Szenarien unterstützt: verzögerte Aufgaben, zeitgesteuerte Wiederholungen, Prioritäten, Geschwindigkeitsbegrenzungen, Fehlerstapel und sogar eine visuelle Oberfläche (Arete). Bull wird von der Community aktiv unterstützt und für Produktionsprojekte empfohlen.



Installation:

npm install bull


Ein einfaches Beispiel – Erstellen einer Warteschlange und eines Handlers:



const Queue = require('bull');

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

// Hinzufügen eines JobsemailQueue.add({ to: 'user@example.com', subject: 'Willkommen!', body: 'Vielen Dank für Ihre Registrierung.'}, { attempts: 3, // Wiederholungsversuche bei Fehlern backoff: 5000, // Verzögerung zwischen Versuchen (5 Sek.) delay: 10000 // Um 10 Sekunden verzögern});

// Handler (Worker)emailQueue.process(async (job) => { const { to, subject, body } = job.data; console.log(`Sende E-Mail an ${to}: ${subject}`); // Hier Aufruf Ihrer E-Mail-Sendefunktion await sendEmail(to, subject, body);});


Schlüsselfunktionen von Bull:

  • Wiederholungsversuche – Konfiguration der Anzahl der Wiederholungen und exponentielle Verzögerung.
  • Zeitplan (Cron) – Ausführung von Aufgaben nach Zeitplan (z. B. jede Nacht).
  • Prioritäten – Aufgaben mit hoher Priorität werden zuerst verarbeitet.
  • Ereignisse – Abonnieren von Ereignissen (completed, failed, progress).
  • Graceful Shutdown – Korrektes Beenden der Arbeit.





2. Bee-Queue – eine leichte und schnelle Warteschlange



Bee-Queue (npm: bee-queue) ist eine minimalistische Alternative zu Bull. Sie bietet nur grundlegende Funktionen, tut dies aber mit minimalem Overhead. Bee-Queue ist ideal für einfache Szenarien, in denen keine komplexen Einstellungen erforderlich sind, aber Geschwindigkeit wichtig ist.



Installation:

npm install bee-queue


Anwendungsbeispiel:



const Queue = require('bee-queue');

const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }, isWorker: true});

// Hinzufügen eines JobsimageQueue.createJob({ imageId: 123, size: 'thumbnail' }) .timeout(30000) // Timeout 30 Sek. .retries(2) // 2 Wiederholungsversuche .save() .then(job => console.log('Job erstellt:', job.id));

// HandlerimageQueue.process((job, done) => { console.log(`Verarbeite Bild ${job.data.imageId}`); // Arbeit ausführen proce

Empfehlungen