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

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



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 bull


Exemple 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-queue


Exemple 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

Recommendations