Files d'attente de tâches pour TypeScript : Bull, Bee-Queue et traitement asynchrone

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 TypeScript : guide complet sur Bull et Bee-Queue



Lors du développement d'applications web modernes en TypeScript, 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. Par exemple : envoi de notifications par email, génération de rapports PDF, traitement d'images ou synchronisation avec des API externes. Pour résoudre ces problèmes, on utilise des files d'attente de tâches (job queues). Dans cet article, nous allons examiner en détail les deux bibliothèques les plus populaires pour TypeScript — Bull et Bee-Queue, et voir comment les intégrer dans votre projet.



Pourquoi des files d'attente de tâches ?



Une file d'attente de tâches permet :

  • De séparer les responsabilités — le service principal se charge uniquement de placer la tâche, et le gestionnaire de l'exécuter.
  • De gérer la charge — on peut limiter le nombre de tâches parallèles (concurrency).
  • De garantir la livraison — les tâches ne sont pas perdues même en cas de panne du processus (grâce à Redis).
  • De planifier l'exécution — différer une tâche à un moment précis ou la répéter selon un calendrier.
  • De gérer les erreurs — tentatives automatiques (retry) avec délai exponentiel.


Bull — la file d'attente la plus populaire pour Node.js et TypeScript



Bull est une bibliothèque puissante basée sur Redis, prenant en charge un ensemble complet de fonctionnalités : priorités, tentatives, délais, pauses, événements et surveillance. Bull dispose d'une excellente typage pour TypeScript.



Installation et configuration

npm install bull @types/bull


Exemple simple d'une file d'attente pour l'envoi d'email :

import Queue from 'bull';

interface EmailJob { to: string; subject: string; body: string;}

// Création d'une file d'attente nommée 'email'const emailQueue = new Queue<EmailJob>('email', { redis: { host: 'localhost', port: 6379 }, defaultJobOptions: { attempts: 3, // jusqu'à 3 tentatives backoff: { type: 'exponential', delay: 2000 }, removeOnComplete: true, }});

// Gestionnaire — s'exécute en arrière-planemailQueue.process(async (job) => { console.log(`Envoi d'email à ${job.data.to}`); // Simulation d'envoi await new Promise(resolve => setTimeout(resolve, 1000)); console.log(`Email envoyé : ${job.data.subject}`);});

// Ajout d'une tâcheasync function addEmail() { await emailQueue.add({ to: 'user@example.com', subject: 'Bonjour depuis la file d\\'attente !', body: 'Ceci est un email de test.', });}

addEmail();


Fonctionnalités avancées de Bull



  • Tâches récurrentes (cron) : queue.add(data, { repeat: { cron: '0 8 * * *' } })
  • Priorités : queue.add(data, { priority: 1 }) — plus le nombre est petit, plus la priorité est élevée.
  • Délai d'exécution : queue.add(data, { delay: 60000 }) — différer d'une minute.
  • Événements : on peut s'abonner à completed, failed, progress et autres.
  • Pause/reprise : queue.pause() / queue.resume().


// Gestion des événementsemailQueue.on('completed', (job, result) => {  console.log(`Tâche ${job.id} terminée`);});

emailQueue.on('failed', (job, err) => { console.error(`Tâche ${job.id} échouée : ${err.message}`);});


Bee-Queue — une alternative légère



Bee-Queue est une file d'attente minimaliste basée sur Redis, plus simple et plus rapide que Bull en termes de consommation mémoire. Elle convient aux petits projets ou aux cas où des configurations complexes ne sont pas nécessaires.



Installation et exemple

npm install bee-queue


import Bee from 'bee                    

Recommendations