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

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, 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 bull


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


Anwendungsbeispiel:

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 {

Empfehlungen