Aufgabenwarteschlangen für TypeScript: Bull, Bee-Queue und asynchrone Verarbeitung

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 TypeScript: Vollständiger Leitfaden zu Bull und Bee-Queue



Bei der Entwicklung moderner Webanwendungen mit TypeScript besteht häufig die Notwendigkeit, langwierige oder ressourcenintensive Operationen asynchron auszuführen, ohne den Hauptthread zu blockieren. Zum Beispiel: Senden von E-Mail-Benachrichtigungen, Generieren von PDF-Berichten, Bildverarbeitung oder Synchronisierung mit externen APIs. Zur Lösung dieser Aufgaben werden Aufgabenwarteschlangen (Job Queues) verwendet. In diesem Artikel betrachten wir im Detail die beiden beliebtesten Bibliotheken für TypeScript — Bull und Bee-Queue — und analysieren, wie man sie in Ihr Projekt integriert.



Wozu braucht man Aufgabenwarteschlangen?



Eine Aufgabenwarteschlange ermöglicht:

  • Verantwortung trennen — der Hauptdienst ist nur für das Einreihen der Aufgabe zuständig, der Bearbeiter für deren Ausführung.
  • Last steuern — die Anzahl paralleler Aufgaben (Concurrency) kann begrenzt werden.
  • Zustellung garantieren — Aufgaben gehen auch bei Prozessabstürzen nicht verloren (dank Redis).
  • Ausführung planen — eine Aufgabe auf einen bestimmten Zeitpunkt verschieben oder nach einem Zeitplan wiederholen.
  • Fehler behandeln — automatische Wiederholungsversuche (Retry) mit exponentiellem Backoff.


Bull — die beliebteste Warteschlange für Node.js und TypeScript



Bull ist eine leistungsstarke, auf Redis basierende Bibliothek, die einen vollständigen Funktionsumfang unterstützt: Prioritäten, Wiederholungsversuche, Verzögerungen, Pausen, Ereignisse und Überwachung. Bull bietet eine hervorragende Typisierung für TypeScript.



Installation und Einrichtung

npm install bull @types/bull


Ein einfaches Beispiel einer Warteschlange zum Senden von E-Mails:

import Queue from 'bull';

interface EmailJob { to: string; subject: string; body: string;}

// Erstellen einer Warteschlange mit dem Namen 'email'const emailQueue = new Queue<EmailJob>('email', { redis: { host: 'localhost', port: 6379 }, defaultJobOptions: { attempts: 3, // bis zu 3 Versuche backoff: { type: 'exponential', delay: 2000 }, removeOnComplete: true, }});

// Bearbeiter — wird im Hintergrund ausgeführtemailQueue.process(async (job) => { console.log(`Sende E-Mail an ${job.data.to}`); // Simuliere das Senden await new Promise(resolve => setTimeout(resolve, 1000)); console.log(`E-Mail gesendet: ${job.data.subject}`);});

// Aufgabe hinzufügenasync function addEmail() { await emailQueue.add({ to: 'user@example.com', subject: 'Hallo aus der Warteschlange!', body: 'Dies ist eine Testnachricht.', });}

addEmail();


Erweiterte Funktionen von Bull



  • Wiederkehrende Aufgaben (Cron): queue.add(data, { repeat: { cron: '0 8 * * *' } })
  • Prioritäten: queue.add(data, { priority: 1 }) — je kleiner die Zahl, desto höher die Priorität.
  • Ausführungsverzögerung: queue.add(data, { delay: 60000 }) — um 1 Minute verzögern.
  • Ereignisse: Man kann auf completed, failed, progress und andere abonnieren.
  • Pause/Fortsetzen: queue.pause() / queue.resume().


// EreignisbehandlungemailQueue.on('completed', (job, result) => {  console.log(`Aufgabe ${job.id} abgeschlossen`);});

emailQueue.on('failed', (job, err) => { console.error(`Aufgabe ${job.id} fehlgeschlagen: ${err.message}`);});


Bee-Queue — eine leichte Alternative



Bee-Queue ist eine minimalistische Redis-basierte Warteschlange, die einfacher und speicherschonender als Bull ist. Geeignet für kleinere Projekte oder Fälle, in denen keine komplexen Konfigurationen erforderlich sind.



Installation und Beispiel

npm install bee-queue


import Bee from 'bee                    

Empfehlungen