Aufgabenplaner in Node.js: node-cron, node-schedule und Bull

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

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-cron


Beispiel: 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-schedule


Beispiel: 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-Instanz


Beispiel: 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

Empfehlungen