Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue und Kue
In modernen Webanwendungen mit Node.js besteht häufig die Notwendigkeit, langwierige oder ressourcenintensive Operationen asynchron auszuführen, ohne den Hauptthread der Anfrageverarbeitung zu blockieren. Dazu werden Aufgabenwarteschlangen (Job Queues) verwendet. Sie ermöglichen es, die Ausführung von Arbeiten zu verschieben, die Last auf mehrere Prozesse zu verteilen und bei Fehlern eine erneute Verarbeitung sicherzustellen.
In diesem Artikel betrachten wir drei beliebte Bibliotheken für die Arbeit mit Aufgabenwarteschlangen in Node.js: Bull, Bee-Queue und Kue. Alle verwenden Redis als Nachrichtenbroker, was hohe Leistung und Zuverlässigkeit gewährleistet.
1. Bull – die beliebteste und funktionsreichste Bibliothek
Bull ist eine moderne, schnelle und zuverlässige Aufgabenwarteschlange für Node.js, die auf Redis basiert. Sie unterstützt alle wichtigen Funktionen: verzögerte Aufgaben, Wiederholungsversuche, Prioritäten, Pause/Fortsetzen sowie Überwachung über eine integrierte Benutzeroberfläche.
Installation
npm install bullBasisbeispiel
const Queue = require('bull');
// Warteschlange erstellenconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');
// Aufgaben-HandleremailQueue.process(async (job) => { const { to, subject } = job.data; console.log(`Sende E-Mail an ${to}: ${subject}`); // Senden simulieren await new Promise(resolve => setTimeout(resolve, 1000)); return { success: true };});
// Aufgabe hinzufügenemailQueue.add({ to: 'user@example.com', subject: 'Hallo von Bull!'}, { attempts: 3, // bei Fehler 3 Mal wiederholen delay: 5000, // um 5 Sekunden verzögern priority: 1 // hohe Priorität});Hauptfunktionen von Bull
- Wiederholungsversuche – automatische Wiederholung bei Fehlern mit konfigurierbarer Verzögerung.
- Prioritäten – Aufgaben mit hoher Priorität werden zuerst bearbeitet.
- Verzögerte Aufgaben – eine Verzögerung vor der Ausführung kann festgelegt werden.
- Pause und Fortsetzen – Anhalten der Warteschlange für Wartungsarbeiten.
- Überwachung – integrierte Weboberfläche
bull-board. - Ereignisse – Abonnieren von Ereignissen (completed, failed, progress).
Fortgeschrittenes Beispiel mit Ereignissen
const Queue = require('bull');const myQueue = new Queue('myQueue');
myQueue.on('completed', (job, result) => { console.log(`Aufgabe ${job.id} abgeschlossen:`, result);});
myQueue.on('failed', (job, err) => { console.error(`Aufgabe ${job.id} fehlgeschlagen: ${err.message}`);});
myQueue.process(async (job) => { // Fortschritt await job.progress(50); // Ausführung return { status: 'ok' };});Bull wird für Projekte empfohlen, die maximale Flexibilität und vorgefertigte Überwachungstools erfordern.
2. Bee-Queue – eine leichte und schnelle Alternative
Bee-Queue ist eine minimalistische Aufgabenwarteschlange, die auf Leistung ausgelegt ist. Sie ist einfacher als Bull, bietet aber dennoch alle grundlegenden Funktionen: verzögerte Aufgaben, Wiederholungen, Prioritäten und Skalierung.
Installation
npm install bee-queueAnwendungsbeispiel
const Queue = require('bee-queue');
const imageQueue = new Queue('images', { redis: { host: '127.0.0.1', port: 6379 }});
// HandlerimageQueue.process(async (job) => { const { filename } = job.data; console.log(`Verarbeite Bild: ${filename}`); // Verarbeitung simulieren await new Promise(resolve => setTimeout(resolve, 2000)); return { processed: true };});
// Aufgabe hinzufügenimageQueue.createJob({ filename: 'photo.jpg'}) .retries(2) .del Auch in der Bibliothek
Internationalisierung (i18n) in Rust: Die besten Bibliotheken und Praktiken
Elasticsearch-Client für Go (Golang): Vollständiger Leitfaden
Datenvalidierung in Go: Bibliotheken, Beispiele und Best Practices
Caching in Rust: Redis, Memcached und integrierte Lösungen
DashMap für Rust: Vollständige Anleitung mit Beispielen