Files d'attente de tâches dans Node.js : Bull, Bee-Queue, Kue et implémentation sur Redis

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Files d'attente de tâches pour JavaScript (Node.js) : Bull, Bee-Queue et Kue



Lors du développement d'applications web en Node.js, il est souvent nécessaire d'exécuter des opérations gourmandes en ressources ou longues en dehors du flux principal de traitement des requêtes HTTP. L'envoi de campagnes d'emails, la génération de rapports PDF, le traitement d'images téléchargées ou l'interaction avec des API externes — toutes ces tâches peuvent bloquer la réponse à l'utilisateur si elles sont exécutées de manière synchrone. Pour résoudre ce problème, on utilise des files d'attente de tâches (job queues).



Une file d'attente de tâches est un mécanisme qui permet de :

  • Reporter l'exécution du travail en arrière-plan.
  • Gérer les priorités et l'ordre de traitement.
  • Répéter automatiquement les tâches en cas d'erreur.
  • Mettre à l'échelle le traitement horizontalement (plusieurs workers).


Dans l'écosystème Node.js, trois bibliothèques ont gagné la plus grande popularité : Bull, Bee-Queue et Kue. Elles sont toutes construites sur Redis, ce qui garantit des performances élevées et une résistance aux pannes. Examinons chacune d'elles en détail.






1. Bull — la file d'attente la plus populaire et la plus fonctionnelle



Bull (npm : bull) est une bibliothèque mature, bien documentée, qui prend en charge pratiquement tous les scénarios nécessaires : tâches différées, répétition planifiée, priorités, limites de vitesse, piles d'erreurs et même une interface visuelle (Arete). Bull est activement maintenue par la communauté et est recommandée pour les projets en production.



Installation :

npm install bull


Exemple simple — création d'une file d'attente et d'un gestionnaire :



const Queue = require('bull');

// Création d'une file d'attente nommée 'email'const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Ajout d'une tâche (job)emailQueue.add({ to: 'user@example.com', subject: 'Bienvenue !', body: 'Merci pour votre inscription.'}, { attempts: 3, // tentatives en cas d'erreur backoff: 5000, // délai entre les tentatives (5 sec) delay: 10000 // différer de 10 secondes});

// Gestionnaire (worker)emailQueue.process(async (job) => { const { to, subject, body } = job.data; console.log(`Envoi d'un email à ${to} : ${subject}`); // Ici, appel de votre fonction d'envoi d'email await sendEmail(to, subject, body);});


Fonctionnalités clés de Bull :

  • Tentatives répétées — configuration du nombre de tentatives et délai exponentiel.
  • Planification (cron) — exécution de tâches selon un calendrier (par exemple, chaque nuit).
  • Priorités — les tâches à haute priorité sont traitées en premier.
  • Événements — abonnement aux événements (completed, failed, progress).
  • Arrêt progressif (Graceful shutdown) — arrêt correct du travail.





2. Bee-Queue — une file d'attente légère et rapide



Bee-Queue (npm : bee-queue) est une alternative minimaliste à Bull. Elle n'offre que des fonctionnalités de base, mais le fait avec une surcharge minimale. Bee-Queue est idéale pour les scénarios simples où des configurations complexes ne sont pas nécessaires, mais où la vitesse est importante.



Installation :

npm install bee-queue


Exemple d'utilisation :



const Queue = require('bee-queue');

const imageQueue = new Queue('image-processing', { redis: { host: '127.0.0.1', port: 6379 }, isWorker: true});

// Ajout d'une tâcheimageQueue.createJob({ imageId: 123, size: 'thumbnail' }) .timeout(30000) // timeout 30 sec .retries(2) // 2 tentatives .save() .then(job => console.log('Job created:', job.id));

// GestionnaireimageQueue.process((job, done) => { console.log(`Traitement de l'image ${job.data.imageId}`); // Exécution du travail proce

Recommendations