Bull (File d'attente de tâches pour Node.js)

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

Qu'est-ce que Bull et pourquoi en a-t-on besoin ?

Bull est l'une des bibliothèques les plus populaires pour gérer les files d'attente de tâches (job queues) dans l'environnement Node.js. Elle est construite sur Redis et permet de traiter efficacement les tâches en arrière-plan, de répartir la charge entre les workers et de gérer les priorités d'exécution. Si votre application doit effectuer des opérations gourmandes en ressources (envoi d'email, génération de PDF, traitement d'images, parsing de données) de manière asynchrone, sans bloquer le flux principal des requêtes, Bull est la solution idéale.

Installation

Pour installer Bull, vous aurez besoin d'un serveur Redis préalablement lancé. L'installation de la bibliothèque elle-même se fait via npm :

npm install bull

Assurez-vous également que Redis est accessible à l'adresse localhost:6379 ou spécifiez vos propres paramètres de connexion.

Fonctionnalités principales

  • Création d'une file d'attente — il suffit d'initialiser un objet avec le nom de la file.
  • Ajout de tâches (jobs) — vous pouvez transmettre n'importe quel objet JavaScript comme données de la tâche.
  • Processeurs (processors) — la fonction qui s'exécute pour chaque tâche.
  • Nouvelles tentatives (retries) — répétition automatique en cas d'erreur.
  • Délais (delays) — exécution différée d'une tâche.
  • Priorités — les tâches à haute priorité sont traitées en premier.
  • Événements — vous pouvez écouter les événements de fin, d'erreur, de progression.
  • Pause/reprise — arrêt temporaire de la file d'attente.

Exemple de code en JavaScript (Node.js)

Un exemple simple de file d'attente pour l'envoi d'email :

const Queue = require('bull');

// Création de la file d'attenteconst emailQueue = new Queue('email', 'redis://127.0.0.1:6379');

// Ajout d'une tâcheemailQueue.add({ to: 'user@example.com', subject: 'Bonjour !', body: 'Ceci est un email de test'}, { attempts: 3, // jusqu'à 3 tentatives en cas d'erreur delay: 5000 // différer de 5 secondes});

// Processeur de la tâcheemailQueue.process(async (job) => { console.log('Envoi de l\'email :', job.data.to); // Appel de votre fonction d'envoi d'email ici // await sendEmail(job.data); console.log('Email envoyé avec succès'); return Promise.resolve();});

// Événement en cas de succèsemailQueue.on('completed', (job) => { console.log(`Tâche ${job.id} terminée`);});

// Événement en cas d'erreuremailQueue.on('failed', (job, err) => { console.error(`Tâche ${job.id} échouée : ${err.message}`);});

Quand utiliser Bull

Bull est recommandé dans les scénarios suivants :

  • Tâches en arrière-plan — envoi de notifications, de newsletters, génération de rapports.
  • Traitement de médias — redimensionnement d'images, conversion de vidéos.
  • Web scraping — collecte de données en arrière-plan sans bloquer l'API.
  • Intégrations avec des services externes — synchronisation de données, appels d'API tierces.
  • Traitement distribué — lancement de plusieurs workers sur différents serveurs.

Grâce à l'utilisation de Redis, la file d'attente Bull est résistante aux pannes : si un worker tombe, la tâche n'est pas perdue et sera exécutée par un autre processus. Cela fait de la bibliothèque un choix fiable pour les systèmes en production.

Recommendations