Warteschlangen und Hintergrundaufgaben in TypeScript: So bringen Sie Ihre Produktion nicht zum Absturz

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

Einleitung: Warum Ihr Server schläft, wenn er arbeiten sollte

\n\n

Stellen Sie sich vor: Ein Benutzer klickt auf die Schaltfläche „Bericht senden“ und die Seite friert für 30 Sekunden ein. Der Server generiert ein PDF, komprimiert Bilder und sendet eine E-Mail – alles synchron. Kommt Ihnen das bekannt vor? Wenn ja, sind Sie in die Falle des blockierenden Codes getappt.

\n\n

In diesem Artikel werden wir uns ansehen, wie Warteschlangen und Hintergrundaufgaben in TypeScript dieses Problem lösen. Sie erfahren, wie Sie schwere Arbeit in Hintergrundprozesse verlagern, ohne die Kontrolle über Fehler und Skalierbarkeit zu verlieren. Das Material richtet sich an Entwickler, die bereits mit Node.js vertraut sind und ihr Projekt auf die nächste Stufe heben möchten.

\n\n

Wir sprechen über die Bibliotheken Bull und BullMQ, streifen RabbitMQ und zeigen reale Codebeispiele in TypeScript. Los geht's!

\n\n

Was ist eine Aufgabenwarteschlange und wozu braucht man sie?

\n\n

Eine Aufgabenwarteschlange (Task Queue) ist ein Mechanismus, der die Benutzeranfrage von ihrer Ausführung trennt. Anstatt die Operation direkt im HTTP-Handler zu verarbeiten, senden wir die Aufgabe an eine Warteschlange, und ein Hintergrund-Worker holt sie ab und führt sie asynchron aus.

\n\n

Typische Anwendungsszenarien

\n
    \n
  • Versand von E-Mails und Push-Benachrichtigungen
  • \n
  • Generierung von PDFs, Bildern, Videos
  • \n
  • Datenparsing und Web-Scraping
  • \n
  • Bestellabwicklung in Online-Shops
  • \n
  • Massenberechnungen und Berichte
  • \n
\n\n

Ohne Warteschlangen riskiert Ihre Anwendung, unter Last zusammenzubrechen. Mit ihnen erhalten Sie Ausfallsicherheit (wenn ein Worker ausfällt, geht die Aufgabe nicht verloren) und Skalierbarkeit (Sie können 10 Worker statt einem ausführen).

\n\n

Bull und BullMQ: Leistungsstarke Warteschlangen für Node.js

\n\n

Bull ist die beliebteste Bibliothek für die Arbeit mit Warteschlangen im Node.js-Ökosystem. Sie basiert auf Redis und unterstützt TypeScript von Haus aus. BullMQ ist ihr Nachfolger, moderner, mit Unterstützung für Sandboxen (isolierte Prozesse) und erweitertem Management.

\n\n

Installation und grundlegende Einrichtung

\n
npm install bullmq ioredis\nnpm install -D @types/bull
\n\n

Erstellen wir eine Warteschlange und einen Worker in TypeScript:

\n\n
// queue.ts\nimport { Queue } from 'bullmq';\n\nconst connection = {\n  host: 'localhost',\n  port: 6379,\n};\n\nexport const emailQueue = new Queue('email', { connection });
\n\n
// worker.ts\nimport { Worker } from 'bullmq';\nimport { sendEmail } from './emailService';\n\nconst worker = new Worker('email', async job => {\n  const { to, subject, body } = job.data;\n  await sendEmail(to, subject, body);\n  console.log(`E-Mail an ${to} gesendet`);\n}, { connection });\n\nworker.on('completed', job => {\n  console.log(`Job ${job.id} abgeschlossen`);\n});\n\nworker.on('failed', (job, err) => {\n  console.error(`Job ${job.id} fehlgeschlagen: ${err.message}`);\n});
\n\n

Jetzt können wir von überall in der Anwendung eine Aufgabe hinzufügen:

\n\n
import { emailQueue } from './queue';\n\nawait emailQueue.add('send-welcome', {\n  to: 'user@example.com',\n  subject: 'Willkommen!',\n  body: 'Vielen Dank für Ihre Registrierung...'\n});
\n\n

Einfach, oder? Aber das ist erst der Anfang. BullMQ bietet noch viel mehr Möglichkeiten.

\n\n

Erweiterte Funktionen von BullMQ

\n
    \n
  • Wiederholungsversuche – Wenn eine Aufgabe fehlschlägt, kann sie automatisch nach N Sekunden neu gestartet werden.
  • \n
  • Ausführungsverzögerung – Aufgabe für eine bestimmte Zeit verschieben.
  • \n
  • Prioritäten – Dringende Aufgaben werden zuerst verarbeitet.
  • \n
  • Ereignisse – Sie können auf Fortschritt, Abschluss, Fehler abonnieren.
  • \n
  • Sandboxen – Codeausführung in einem isolierten Prozess (Sicherheit + Sauberkeit).
  • \n
\n\n

Beispiel mit Wiederholungen und Verzögerung:

\n\n
await emailQueue.add('send-invoice', {\n  invoiceId: 123,\n  email: 'client@example.com'\n}, {\n  attempts: 5,\n  backoff: { type: 'expon                

Blogs

Buchempfehlungen