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

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 : Bull, Agenda et Bee-Queue



Dans les applications web modernes en TypeScript, il est souvent nécessaire d'exécuter des opérations gourmandes en ressources ou longues de manière asynchrone, sans bloquer le thread principal. Les files d'attente de tâches (Job Queues) sont un modèle architectural éprouvé qui permet de différer l'exécution des tâches, de répartir la charge entre les workers et d'assurer la fiabilité du traitement. Dans cet article, nous examinerons trois outils populaires pour TypeScript : Bull, Agenda et Bee-Queue. Vous découvrirez comment les intégrer dans un projet, quels sont leurs points forts et quel outil choisir pour des scénarios spécifiques.



1. Bull — une file d'attente puissante basée sur Redis



Bull est sans doute la bibliothèque la plus populaire pour gérer les files d'attente de tâches dans Node.js/TypeScript. Elle utilise Redis comme backend, ce qui garantit des performances élevées et une résistance aux pannes. Bull prend en charge les priorités des tâches, les tentatives répétées, les délais, ainsi que des scénarios complexes avec pause et reprise de la file d'attente.



Installation :

npm install bullnpm install @types/bull  // pour TypeScript


Exemple simple de producteur-consommateur :

import Queue from 'bull';

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

// Producteur : ajout d'une tâcheasync function sendWelcomeEmail(userId: string) { await emailQueue.add( { userId, type: 'welcome' }, { attempts: 3, backoff: 2000 } // 3 tentatives avec un délai de 2s );}

// Consommateur : traitement de la tâcheemailQueue.process(async (job) => { const { userId, type } = job.data; console.log(`Envoi du courrier ${type} à l'utilisateur ${userId}`); // Logique d'envoi d'email ici});


Bull fournit également une interface de surveillance pratique via bull-board ou bull-repl, ce qui facilite le débogage en production.



2. Agenda — une file d'attente flexible avec prise en charge des plannings



Agenda est une bibliothèque qui utilise également MongoDB comme stockage. Sa principale caractéristique est la prise en charge intégrée des tâches périodiques (plannings de type cron) et une API pratique pour définir des travaux récurrents. Agenda est parfait pour les tâches qui doivent être exécutées selon un planning : nettoyage de base de données, génération de rapports, envoi de newsletters.



Installation :

npm install agendanpm install @types/agenda


Exemple d'utilisation avec un planning :

import Agenda from 'agenda';

const agenda = new Agenda({ db: { address: 'mongodb://localhost:27017/agenda-example' }});

// Définition d'une tâcheagenda.define('send weekly report', async (job) => { const { department } = job.attrs.data; console.log(`Génération du rapport hebdomadaire pour le département ${department}`);});

// Démarrage de l'agent et planification de la tâche(async () => { await agenda.start(); // Exécution chaque vendredi à 18h00 await agenda.every('0 18 * * 5', 'send weekly report', { department: 'IT' });})();


Agenda prend en charge les priorités, les tentatives répétées et l'arrêt progressif (graceful shutdown). Cependant, elle est moins performante que Bull en raison de l'utilisation de MongoDB au lieu de Redis.



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



Bee-Queue est une file d'attente minimaliste basée sur Redis, conçue pour des performances maximales et une petite taille de code. Elle ne prend pas en charge les fonctionnalités complexes comme les priorités ou les plannings, mais elle est idéale pour les scénarios simples où la vitesse et une faible consommation de mémoire sont importantes.



Installation :

npm install bee-queuenpm install @types/bee-queue


Exemple de fonctionnement :

import Bee from 'bee-queue';

const imageQueue = new Bee('image-processing', { redis: { host: 'localhost', port: 6379 }});

// ProducteurimageQueue.createJob({

Recommendations