Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue und Kue
Bei der Entwicklung von Webanwendungen mit Node.js besteht häufig die Notwendigkeit, langwierige oder ressourcenintensive Operationen asynchron auszuführen, ohne den Hauptthread der Anfrageverarbeitung zu blockieren. Typische Beispiele sind das Senden von E-Mail-Benachrichtigungen, die Verarbeitung hochgeladener Bilder, die Generierung von PDF-Berichten oder die Synchronisation mit externen APIs. Zur Lösung dieser Aufgaben werden Aufgabenwarteschlangen (Job Queues) verwendet – ein Mechanismus, der es ermöglicht, die Ausführung von Arbeiten zu verschieben, die Last zu verteilen und Ausfallsicherheit zu gewährleisten.
In diesem Artikel betrachten wir drei beliebte Bibliotheken zur Verwaltung von Warteschlangen im Node.js-Ökosystem: Bull, Bee-Queue und Kue. Jede von ihnen hat ihre eigenen Besonderheiten, Vorteile und Anwendungsszenarien.
Wozu braucht man Aufgabenwarteschlangen?
Die Hauptgründe für die Einführung von Warteschlangen im Node.js-Backend sind:
- Entlastung des Hauptthreads. Langwierige Operationen (z. B. das Senden von 1000 E-Mails) blockieren nicht die Antwort an den Benutzer.
- Wiederholungsversuche. Wenn eine Aufgabe mit einem Fehler endet, wiederholt die Warteschlange sie automatisch in einem festgelegten Intervall.
- Planung. Die Ausführung einer Aufgabe kann auf eine bestimmte Zeit verschoben werden (z. B. in 1 Stunde).
- Skalierung. Mehrere Worker können parallel Aufgaben aus einer einzigen Warteschlange verarbeiten.
1. Bull – moderne und leistungsstarke Warteschlange
Bull ist eine der beliebtesten Bibliotheken für die Arbeit mit Warteschlangen in Node.js. Sie basiert auf Redis und bietet eine umfangreiche API zur Aufgabenverwaltung.
Hauptfunktionen von Bull:
- Unterstützung von Aufgabenprioritäten.
- Konfigurierbare Wiederholungsversuche (Retries).
- Verzögerter Start (Delay).
- Ereignisse (Job abgeschlossen, Fehler, Fortschritt).
- Integrierte UI-Oberfläche zur Überwachung über
bull-board.
Installation:
npm install bullBeispiel für die Erstellung einer Warteschlange und eines Handlers:
const Queue = require('bull');
// Erstellen einer Warteschlange zum Senden von E-Mailsconst emailQueue = new Queue('email', { redis: { host: '127.0.0.1', port: 6379 }});
// Hinzufügen einer Aufgabe zur WarteschlangeemailQueue.add({ to: 'user@example.com', subject: 'Hallo!', body: 'Dies ist eine Test-E-Mail'}, { attempts: 3, // bis zu 3 Wiederholungen bei Fehler delay: 5000 // um 5 Sekunden verzögern});
// Aufgaben-HandleremailQueue.process(async (job) => { const { to, subject, body } = job.data; // Simulation des E-Mail-Versands await sendEmail(to, subject, body); console.log(`E-Mail gesendet an: ${to}`);});Wann Bull wählen: wenn Sie eine zuverlässige Warteschlange mit erweiterten Funktionen (Prioritäten, Wiederholungsversuche, Überwachung) benötigen und bereit sind, Redis zu verwenden.
2. Bee-Queue – leicht und schnell
Bee-Queue ist eine minimalistische Warteschlange, die ebenfalls auf Redis basiert. Sie ist auf Einfachheit und Leistung ausgelegt. Der Code der Bibliothek ist kompakt, die API intuitiv verständlich.
Besonderheiten von Bee-Queue:
- Keine Abhängigkeiten außer Redis.
- Unterstützung von Ereignissen (ready, job succeeded, job failed).
- Möglichkeit zur Konfiguration eines Timeouts für die Verarbeitung.
- Einfaches System für Wiederholungsversuche.
Installation:
npm install bee-queueAnwendungsbeispiel:
const Queue = require('bee-queue');
const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }});
// Aufgabe hinzufügenimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }) .retries(2) .save();
// HandlerimageQueue.process(async (job) => { const { Auch in der Bibliothek
Arbeiten mit Bildern in Go: Resize und Crop mit der Imaging-Bibliothek
GraphQL in C++: Die Bibliothek cppgraphqlgen zur API-Erstellung
WebSocket-Bibliotheken für Java: Vollständiger Leitfaden zur Echtzeit-Implementierung