Aufgabenwarteschlangen für TypeScript: Überblick über Bibliotheken und praktische Implementierung
In modernen Webanwendungen mit TypeScript besteht häufig die Notwendigkeit, rechenintensive Operationen asynchron auszuführen, ohne den Hauptthread zu blockieren. Dazu werden Aufgabenwarteschlangen (job queues) verwendet. Sie ermöglichen es, die Ausführung zu verschieben, die Last zu verteilen und eine zuverlässige Verarbeitung von Hintergrundprozessen sicherzustellen. In diesem Artikel betrachten wir die besten Bibliotheken für die Arbeit mit Warteschlangen in TypeScript, ihre Besonderheiten und Anwendungsbeispiele.
Wozu braucht man Aufgabenwarteschlangen?
Stellen Sie sich vor, Ihre Anwendung muss 1000 E-Mails versenden, Bilder verarbeiten oder komplexe Berechnungen durchführen. Wenn dies synchron geschieht, wartet der Benutzer minutenlang auf eine Antwort. Eine Warteschlange löst dieses Problem: Sie fügen eine Aufgabe in eine Liste ein, und ein Worker verarbeitet sie im Hintergrund. Die wichtigsten Vorteile:
- Asynchronität und nicht-blockierende Verarbeitung
- Skalierbarkeit (mehrere Worker können parallel arbeiten)
- Ausfallsicherheit (Aufgabe wird bei Fehler neu gestartet)
- Planung (Aufgaben können für eine bestimmte Zeit zurückgestellt werden)
Top-Bibliotheken für TypeScript
Die meisten gängigen Lösungen basieren auf Redis – einer schnellen In-Memory-Datenbank, die sich ideal für Warteschlangen eignet. Wir betrachten drei Hauptoptionen:
1. Bull (die beliebteste)
Bull ist eine ausgereifte und leistungsstarke Bibliothek für Node.js mit vollständiger TypeScript-Unterstützung. Sie bietet eine umfangreiche API und integrierte Mechanismen für Wiederholungen, Verzögerungen und Prioritäten.
Installation:
npm install bullnpm install @types/bullBeispiel für die Erstellung einer Warteschlange und eines Handlers:
import Queue from 'bull';
// Erstellen einer Warteschlange für die Verarbeitung von E-Mail-Kampagnenconst emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});
// Hinzufügen einer Aufgabeasync function sendWelcomeEmail(userId: string) { await emailQueue.add({ userId });}
// Handler (Worker)emailQueue.process(async (job) => { const { userId } = job.data; // Hier die Logik zum Senden der E-Mail console.log(`Sende E-Mail an Benutzer ${userId}`); await sendEmail(userId);});
// Fehlerbehandlung und WiederholungsversucheemailQueue.on('failed', (job, err) => { console.error(`Job ${job.id} fehlgeschlagen: ${err.message}`);});2. Bee-Queue (leichte Alternative)
Bee-Queue ist eine minimalistische Warteschlange, die ebenfalls auf Redis basiert. Sie ist einfacher als Bull, aber für einfache Szenarien schneller. Gut geeignet, wenn keine komplexen Einstellungen erforderlich sind.
Installation:
npm install bee-queuenpm install @types/bee-queueBeispiel:
import Queue from 'bee-queue';
const imageQueue = new Queue('images', { redis: { host: 'localhost', port: 6379 }});
// Aufgabe hinzufügenimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }).save();
// VerarbeitungimageQueue.process((job, done) => { const { imagePath } = job.data; // Bildverarbeitung resizeImage(imagePath) .then(() => done()) .catch(done);});3. RSMQ (ohne separaten Worker)
RSMQ (Redis Simple Message Queue) ist eine Warteschlange auf Basis von reinem Redis, die keinen separaten Worker-Prozess erfordert. Aufgaben werden über einen Pull-Mechanismus verarbeitet. Ideal für eine Microservice-Architektur.
Installation:
npm install rsmqBeispiel:
import RedisSMQ from 'rsmq';
const rsmq = new RedisSMQ({ host: 'localhost', port: 6379 });
// Warteschlange erstellenawait rsmq.createQueueAsync({ qname: 'tasks' });
// Nachricht sendenawait rsmq.sendMessageAsync({ qname: 'tasks', message: '{"type":"process_payment"}' });
// Nachricht empfangen und verarbeiten (in einer Schleife)const message = await rsmq.receiveMessageAsync({ qname: 'tasks' });if (message.id) { console.log('Verarbeite:', Auch in der Bibliothek
Arbeiten mit Excel in Go (Golang): Bibliotheken, Beispiele und Werkzeuge
JWT-Tokens in Rust: Die Bibliothek jsonwebtoken und Authentifizierung
WebSocket-Bibliotheken für TypeScript: ws, Socket.IO, uWebSockets.js
Arbeiten mit XML in Java: DOM, SAX, StAX und JAXB
HTML-Parsing in PHP: Überblick über Bibliotheken und Werkzeuge