Files d'attente de tâches en JavaScript pour débutants : guide complet

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

Introduction : Pourquoi les files d'attente de tâches ?



Imaginez que vous lancez un serveur web sur Node.js. Un utilisateur envoie une demande d'envoi de 1000 e-mails. Si vous traitez cette demande de manière synchrone, le serveur "se bloquera" pendant plusieurs minutes — tous les autres utilisateurs ne pourront pas obtenir de réponse.



Comment résoudre ce problème ? La réponse — les files d'attente de tâches (task queues). Elles permettent de différer l'exécution d'opérations gourmandes en ressources (envoi d'e-mails, génération de PDF, traitement d'images) et de les exécuter en arrière-plan, sans bloquer le flux principal de l'application.



Dans cet article, nous aborderons :

  • Ce qu'est une file d'attente de tâches et comment elle fonctionne
  • Les bibliothèques populaires pour Node.js (Bull, Kue)
  • Des exemples de code : création, ajout et traitement de tâches
  • Les bonnes pratiques pour les débutants


1. Bases des files d'attente de tâches dans Node.js



Qu'est-ce qu'une file d'attente de tâches ?

Une file d'attente de tâches est une structure de données fonctionnant sur le principe du FIFO (First In, First Out — premier entré, premier sorti). Les tâches sont ajoutées à la fin de la file et traitées depuis le début. Généralement, les files d'attente sont construites sur la base de Redis — un stockage clé-valeur rapide en mémoire.



Les composants principaux d'une file d'attente :

  • Producteur (Producer) — le code qui ajoute les tâches à la file
  • Consommateur (Worker) — le code qui récupère les tâches et les exécute
  • Gestionnaire de file d'attente (Queue Manager) — le mécanisme qui gère la file (généralement Redis)


Bibliothèques populaires

Pour Node.js, il existe deux bibliothèques principales :

  • Bull — moderne, rapide, avec prise en charge des priorités, des tentatives et des délais
  • Kue — ancienne mais simple (actuellement moins populaire)

Dans cet article, nous nous concentrerons sur Bull, car elle est activement maintenue et offre plus de fonctionnalités.



2. Installation et configuration de Bull



Étape 1 : Installation de Redis

Bull utilise Redis. Si vous n'avez pas Redis, installez-le :

# macOSbrew install redis

# Ubuntusudo apt-get install redis-server

# Démarrage de Redisredis-server


Étape 2 : Installation de Bull

Créez un nouveau projet et installez le paquet :

mkdir queue-democd queue-demonpm init -ynpm install bull


Étape 3 : Configuration de base

Créez le fichier queue.js :

const Queue = require('bull');

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

module.exports = emailQueue;


3. Exemple : file d'attente pour l'envoi d'e-mails



Étape 1 : Création du Producteur (ajout de tâches)

Créez le fichier producer.js :

const emailQueue = require('./queue');

async function addEmailTask(to, subject, body) { // Ajout d'une tâche à la file const job = await emailQueue.add({ to: to, subject: subject, body: body }, { // Options de la tâche attempts: 3, // Nombre de tentatives en cas d'erreur backoff: 5000, // Délai entre les tentatives (5 sec) delay: 1000 // Délai avant exécution (1 sec) });

console.log(`Tâche ajoutée avec l'ID : ${job.id}`); return job;}

// Exemple d'utilisationaddEmailTask('user@example.com', 'Bonjour !', 'Message de test');


Étape 2 : Création du Worker (traitement des tâches)

Créez le fichier worker.js :

const emailQueue = require('./queue');

// Fonction simulant l'envoi d'un e-mailasync function sendEmail(to, subject, body) { console.log(`Envoi de l'e-mail à ${to}...`); // Simulation d'un délai await new Promise(resolve => setTimeout(resolve, 2000)); console.log(`E-mail envoyé : ${subject}`);}

// Gestionnaire de la file d'attente

Blogs

Book Recommendations