Planificateur de tâches en Node.js : aperçu des bibliothèques node-cron, node-schedule et Bull
Dans le développement web moderne avec Node.js, il est souvent nécessaire d'exécuter du code selon un horaire ou avec un délai. Qu'il s'agisse d'envoyer des newsletters par email, de vider le cache, de générer des rapports ou de synchroniser des données, un planificateur de tâches fiable est indispensable. Dans cet article, nous allons analyser trois outils populaires : node-cron, node-schedule et Bull. Vous découvrirez leurs caractéristiques, des exemples d'utilisation et comprendrez lequel choisir pour votre tâche.
1. node-cron — le classique Cron pour Node.js
node-cron est une bibliothèque minimaliste qui implémente la syntaxe du planificateur Unix cron. Elle est idéale pour les tâches répétitives simples.
Installation
npm install node-cronExemple : tâche s'exécutant toutes les minutes
const cron = require('node-cron');
cron.schedule('* * * * *', () => { console.log('La tâche s\\'exécute toutes les minutes');});Format de l'expression cron
L'expression se compose de 5 champs :
seconde (0-59, optionnel)minute (0-59)heure (0-23)jour du mois (1-31)mois (1-12)jour de la semaine (0-7, 0 et 7 = dimanche)
Exemple avancé : tous les jours à 8h30
cron.schedule('30 8 * * *', () => { // Envoi des statistiques matinales sendMorningReport();});Caractéristiques
- Prise en charge des fuseaux horaires via l'option
timezone - Possibilité de démarrer et d'arrêter des tâches
- Léger (~20 Ko)
- Ne convient pas pour une logique complexe avec des files d'attente
2. node-schedule — un planificateur flexible avec des règles récurrentes
node-schedule offre une API plus riche : vous pouvez définir des horaires via des objets, et pas seulement des chaînes cron. C'est pratique pour des scénarios complexes (par exemple, « chaque deuxième mardi du mois à 15h00 »).
Installation
npm install node-scheduleExemple : tâche avec expression cron
const schedule = require('node-schedule');
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('Exécution toutes les 5 minutes');});Exemple : règle récurrente via un objet
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Lun, Mer, Venrule.hour = 10;rule.minute = 30;
schedule.scheduleJob(rule, () => { console.log('Tâche en semaine à 10h30');});Exemple : exécution différée
const date = new Date(Date.now() + 5000); // dans 5 secondesschedule.scheduleJob(date, () => { console.log('Tâche unique dans 5 secondes');});Caractéristiques
- Définition flexible des règles (jours de la semaine, mois, plages)
- Prise en charge des tâches uniques basées sur une date
- Possibilité d'annuler une tâche :
job.cancel() - Ne prend pas en charge la clustering ni les files d'attente
3. Bull — une file d'attente puissante avec planificateur et répétitions
Bull n'est pas seulement un planificateur, mais un système de files d'attente complet basé sur Redis. Il est idéal pour les environnements de production : il prend en charge les tâches différées, les répétitions en cas d'erreur, les priorités et le traitement parallèle.
Installation
npm install bull# Nécessite Redis installéExemple : tâche simple avec délai
const Queue = require('bull');const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');
// Ajout d'une tâche avec un délai d'1 heuremyQueue.add({ email: 'user@example.com' }, { delay: 3600000 });
// GestionnairemyQueue.process(async (job) => { console.log(`Envoi d'email pour ${job.data.email}`); await sendEmail(job