Planificateur de tâches en Node.js : aperçu et exemples d'utilisation
Dans le développement backend moderne, il est souvent nécessaire d'exécuter du code selon un calendrier : envoyer des newsletters par email, vider le cache, créer des sauvegardes de bases de données ou mettre à jour des données agrégées. Dans l'écosystème Node.js, plusieurs bibliothèques matures existent à cet effet. Dans cet article, nous allons examiner trois approches principales de la planification des tâches : le cron classique, la planification flexible et les files d'attente de tâches.
1. node-cron — le cron classique pour JavaScript
node-cron est une bibliothèque minimaliste qui permet d'exécuter des fonctions selon des expressions cron standard. Elle est idéale pour les tâches périodiques simples (toutes les minutes, toutes les heures, tous les jours à 3h00).
Installation :
npm install node-cronExemple d'une tâche qui s'exécute chaque minute :
const cron = require('node-cron');
cron.schedule('* * * * *', () => { console.log('La tâche s\\'exécute chaque minute');});Structure d'une expression cron : seconde minute heure jour_du_mois mois jour_de_la_semaine (dans node-cron, la seconde est optionnelle).
Exemples d'expressions :
'0 0 * * *'— tous les jours à minuit'*/5 * * * *'— toutes les 5 minutes'0 9-18 * * 1-5'— toutes les heures de 9h à 18h en semaine'30 3 * * 0'— tous les dimanches à 3h30
La bibliothèque prend en charge la validation des expressions et le démarrage/arrêt des tâches :
const task = cron.schedule('*/10 * * * *', () => { // tâche toutes les 10 minutes});
// Arrêter la tâchetask.stop();
// Reprendretask.start();
// Vérifier si la tâche est activeconsole.log(task.isStarted()); // true/falseQuand l'utiliser : pour des actions périodiques simples où le stockage d'état ou la gestion des erreurs ne sont pas nécessaires.
2. node-schedule — planification flexible avec prise en charge des règles récurrentes
node-schedule est une alternative plus puissante qui permet de définir un calendrier non seulement via cron, mais aussi via des objets JavaScript avec indication explicite des dates, jours de la semaine et heures.
Installation :
npm install node-scheduleExemple avec une expression cron :
const schedule = require('node-schedule');
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('S\\'exécute toutes les 5 minutes');});Le principal avantage est la possibilité de définir un calendrier via un objet :
const job = schedule.scheduleJob({ hour: 14, minute: 30, dayOfWeek: [1, 3, 5] // lundi, mercredi, vendredi}, () => { console.log('14h30 en semaine');});On peut également planifier une tâche unique à une date spécifique :
const date = new Date(2025, 11, 31, 23, 59, 0);
schedule.scheduleJob(date, () => { console.log('Bonne année !');});La bibliothèque prend en charge l'annulation de la tâche et la vérification de la prochaine heure d'exécution :
// Annuler la tâchejob.cancel();
// Obtenir la prochaine date d'exécutionconsole.log(job.nextInvocation()); // Date objectQuand l'utiliser : lorsque vous avez besoin d'un contrôle précis du temps, de combiner des règles ou d'effectuer des tâches uniques.
3. Bull — files d'attente de tâches avec planification et tentatives
Bull est un système complet de files d'attente basé sur Redis, qui inclut un puissant planificateur. Bull permet non seulement de différer des tâches, mais aussi de gérer les tentatives, les priorités et l'exécution parallèle.
Installation :
npm install bullExemple de base d'une file d'attente avec une tâche différée :
const Queue = require('bull');
const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 63 Aussi dans la bibliothèque
DashMap Rust : guide complet avec exemples
Configuration des applications PHP : bibliothèques et outils pour la gestion des paramètres
Travailler avec les archives ZIP en PHP : ZipArchive et bibliothèques de compression
TypeDoc pour TypeScript : guide complet avec exemples
gRPC pour C++ : bibliothèques, configuration et exemples de code