Ordonnanceurs de tâches BullMQ : simplifier les tâches récurrentes dans Node.js

Les ordonnanceurs de tâches BullMQ offrent une solution robuste pour gérer les tâches récurrentes dans les applications Node.js, évitant les limites des solutions cron en processus comme node-cron ou des crontabs au niveau du système d'exploitation. En stockant les files d'attente et les ordonnanceurs dans Redis, BullMQ garantit la persistance des tâches malgré les redémarrages, la déduplication entre les réplicas et une intégration fluide avec les infrastructures de tâches en arrière-plan existantes.
Une approche unifiée de l'ordonnancement
Contrairement aux outils cron traditionnels qui s'exécutent dans un seul processus, les ordonnanceurs BullMQ fonctionnent au sein de l'écosystème BullMQ, en utilisant les mêmes travailleurs qui traitent les tâches ponctuelles. Cela permet aux tâches récurrentes de bénéficier des fonctionnalités intégrées de BullMQ, comme les nouvelles tentatives, le backoff exponentiel et le contrôle de la concurrence. L'API upsertJobScheduler (introduite dans BullMQ 5.16) remplace les anciennes méthodes comme queue.add avec l'option repeat, offrant une gestion des calendriers plus propre et plus fiable.
Configuration pratique et bonnes pratiques
Pour commencer, BullMQ nécessite Node.js 26 et Redis (ou Postgres) exécutés localement ou via Docker. Après avoir installé BullMQ (npm i bullmq), les développeurs peuvent définir des ordonnanceurs en Node.js classique ou dans des frameworks comme NestJS avec @nestjs/bullmq. Un avantage clé réside dans la stabilité de l'ordonnanceur : utiliser le même id dans les différents déploiements met à jour le calendrier sur place au lieu de créer des doublons.
Par exemple, un ordonnanceur de heartbeat rapide peut s'exécuter toutes les 10 secondes avec des nouvelles tentatives en backoff exponentiel, tandis qu'une tâche de nettoyage quotidienne peut démarrer à 03 h 15 (heure de Berlin). Ces deux exemples illustrent comment BullMQ gère l'ordonnancement sensible aux fuseaux horaires, avec des limites ou une exécution immédiate optionnelles. Le maintien de l'enregistrement de l'ordonnanceur dans un script de démarrage dédié ou un crochet de framework (comme onModuleInit de NestJS) garantit un comportement de déploiement cohérent.
Pourquoi BullMQ se distingue
Source : DEV Community. Synthèse éditoriale assistée par IA — TechnoExpress.

