Files d'attente de tâches pour JavaScript (Node.js) : Bull, Bee-Queue et Kue
Dans les applications web modernes basées sur Node.js, il est souvent nécessaire d'exécuter des opérations longues ou gourmandes en ressources de manière asynchrone, sans bloquer le thread principal de traitement des requêtes. Pour cela, on utilise des files d'attente de tâches (job queues). Elles permettent de différer l'exécution du travail, de répartir la charge entre plusieurs processus et d'assurer un nouveau traitement en cas d'erreur.
Dans cet article, nous examinerons trois bibliothèques populaires pour travailler avec des files d'attente de tâches dans Node.js : Bull, Bee-Queue et Kue. Toutes utilisent Redis comme courtier de messages, ce qui garantit des performances élevées et une grande fiabilité.
1. Bull — la bibliothèque la plus populaire et la plus fonctionnelle
Bull est une file d'attente de tâches moderne, rapide et fiable pour Node.js, construite sur Redis. Elle prend en charge toutes les fonctionnalités clés : tâches différées, nouvelles tentatives, priorités, pause/reprise, ainsi que la surveillance via une interface utilisateur intégrée.
Installation
npm install bullExemple de base
const Queue = require('bull');
// Création de la file d'attenteconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');
// Gestionnaire de tâchesemailQueue.process(async (job) => { const { to, subject } = job.data; console.log(`Envoi d'un e-mail à ${to} : ${subject}`); // Simulation d'envoi await new Promise(resolve => setTimeout(resolve, 1000)); return { success: true };});
// Ajout d'une tâcheemailQueue.add({ to: 'user@example.com', subject: 'Bonjour de Bull !'}, { attempts: 3, // répéter 3 fois en cas d'erreur delay: 5000, // différer de 5 secondes priority: 1 // priorité élevée});Principales fonctionnalités de Bull
- Nouvelles tentatives — répétition automatique en cas d'échec avec un délai configurable.
- Priorités — les tâches à haute priorité sont traitées en premier.
- Tâches différées — possibilité de définir un délai avant l'exécution.
- Pause et reprise — arrêt de la file d'attente pour maintenance.
- Surveillance — interface web intégrée
bull-board. - Événements — abonnement aux événements (completed, failed, progress).
Exemple avancé avec événements
const Queue = require('bull');const myQueue = new Queue('myQueue');
myQueue.on('completed', (job, result) => { console.log(`Tâche ${job.id} terminée :`, result);});
myQueue.on('failed', (job, err) => { console.error(`Tâche ${job.id} échouée : ${err.message}`);});
myQueue.process(async (job) => { // Progression await job.progress(50); // Exécution return { status: 'ok' };});Bull est recommandé pour les projets nécessitant une flexibilité maximale et des outils de surveillance prêts à l'emploi.
2. Bee-Queue — une alternative légère et rapide
Bee-Queue est une file d'attente de tâches minimaliste, axée sur la performance. Elle est plus simple que Bull, mais offre toutes les fonctionnalités de base : tâches différées, répétitions, priorités et mise à l'échelle.
Installation
npm install bee-queueExemple d'utilisation
const Queue = require('bee-queue');
const imageQueue = new Queue('images', { redis: { host: '127.0.0.1', port: 6379 }});
// GestionnaireimageQueue.process(async (job) => { const { filename } = job.data; console.log(`Traitement de l'image : ${filename}`); // Simulation de traitement await new Promise(resolve => setTimeout(resolve, 2000)); return { processed: true };});
// Ajout d'une tâcheimageQueue.createJob({ filename: 'photo.jpg'}) .retries(2) .del Aussi dans la bibliothèque
opentelemetry-go pour Go : guide complet avec exemples
Travailler avec S3 et les stockages cloud en TypeScript : guide complet
Travailler avec Apache Kafka en Swift (iOS/macOS) : bibliothèques et exemples
Traitement Markdown en C# (.NET) : bibliothèques et outils
Planificateur de tâches en TypeScript : guide complet des bibliothèques cron et des minuteurs