Aufgabenplaner in Node.js: Überblick über die Bibliotheken node-cron, node-schedule und Bull
In der modernen Webentwicklung mit Node.js besteht häufig die Notwendigkeit, Code nach einem Zeitplan oder mit einer Verzögerung auszuführen. Ob es sich um das Versenden von E-Mail-Newslettern, das Leeren des Caches, die Generierung von Berichten oder die Datensynchronisation handelt – ein zuverlässiger Aufgabenplaner ist unverzichtbar. In diesem Artikel betrachten wir drei beliebte Werkzeuge: node-cron, node-schedule und Bull. Sie erfahren ihre Besonderheiten, Anwendungsbeispiele und verstehen, welches Sie für Ihre Aufgabe wählen sollten.
1. node-cron – der Cron-Klassiker für Node.js
node-cron ist eine minimalistische Bibliothek, die die Syntax des Unix-Planers Cron implementiert. Sie ist ideal für einfache, wiederkehrende Aufgaben.
Installation
npm install node-cronBeispiel: Aufgabe, die jede Minute ausgeführt wird
const cron = require('node-cron');
cron.schedule('* * * * *', () => { console.log('Aufgabe wird jede Minute ausgeführt');});Format des Cron-Ausdrucks
Der Ausdruck besteht aus 5 Feldern:
Sekunde (0-59, optional)Minute (0-59)Stunde (0-23)Tag des Monats (1-31)Monat (1-12)Wochentag (0-7, 0 und 7 = Sonntag)
Fortgeschrittenes Beispiel: täglich um 8:30 Uhr morgens
cron.schedule('30 8 * * *', () => { // Morgendliche Statistik senden sendMorningReport();});Besonderheiten
- Unterstützung von Zeitzonen über die Option
timezone - Möglichkeit zum Starten und Stoppen von Aufgaben
- Geringes Gewicht (~20 KB)
- Nicht geeignet für komplexe Logik mit Warteschlangen
2. node-schedule – flexibler Planer mit wiederkehrenden Regeln
node-schedule bietet eine umfangreichere API: Sie können Zeitpläne über Objekte und nicht nur über Cron-Strings festlegen. Dies ist praktisch für komplexe Szenarien (z. B. „jeden zweiten Dienstag im Monat um 15:00 Uhr“).
Installation
npm install node-scheduleBeispiel: Aufgabe mit Cron-Ausdruck
const schedule = require('node-schedule');
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('Start alle 5 Minuten');});Beispiel: Wiederkehrende Regel über ein Objekt
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Mo, Mi, Frrule.hour = 10;rule.minute = 30;
schedule.scheduleJob(rule, () => { console.log('Aufgabe an Wochentagen um 10:30');});Beispiel: Verzögerter Start
const date = new Date(Date.now() + 5000); // in 5 Sekundenschedule.scheduleJob(date, () => { console.log('Einmalige Aufgabe in 5 Sekunden');});Besonderheiten
- Flexible Regeldefinition (Wochentage, Monate, Bereiche)
- Unterstützung für einmalige Aufgaben nach Datum
- Möglichkeit zum Abbrechen einer Aufgabe:
job.cancel() - Unterstützt keine Clusterbildung und Warteschlangen
3. Bull – leistungsstarke Warteschlange mit Planer und Wiederholungen
Bull ist nicht nur ein Planer, sondern ein vollwertiges Warteschlangensystem auf Basis von Redis. Es ist ideal für Produktionsumgebungen: Es unterstützt verzögerte Aufgaben, Wiederholungen bei Fehlern, Prioritäten und parallele Verarbeitung.
Installation
npm install bull# Erfordert eine installierte Redis-InstanzBeispiel: Einfache Aufgabe mit Verzögerung
const Queue = require('bull');const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');
// Aufgabe mit einer Verzögerung von 1 Stunde hinzufügenmyQueue.add({ email: 'user@example.com' }, { delay: 3600000 });
// HandlermyQueue.process(async (job) => { console.log(`Sende E-Mail an ${job.data.email}`); await sendEmail(job