En el desenvolupament d'aplicacions modernes amb Node.js, l'execució de tasques programades és un requisit habitual que es pot abordar de múltiples formes. Mentre que solucions com node-cron o @nestjs/schedule funcionen correctament en entorns d'una sola instància, presenten limitacions quan es necessita resiliència davant reinicis, deduplicació entre rèpliques o integració amb altres processos asíncrons. Aquí és on BullMQ es posiciona com una alternativa sòlida, recolzant-se en Redis per gestionar cues i schedulers de forma centralitzada.
BullMQ ofereix els anomenats Job Schedulers, que permeten encuar treballs recurrents seguint patrons cron o intervals fixos. A diferència dels temporitzadors en procés, aquests schedulers persisteixen a Redis, sobreviuen a caigudes del servidor i són compartits per múltiples workers. A més, hereten les capacitats de reintents, backoff i concurrència que BullMQ proporciona per a treballs puntuals. Això converteix els schedulers en una peça clau per a arquitectures escalables, on es requereix que el mateix worker processi tant tasques periòdiques com treballs sota demanda.
La implementació a Node.js és directa: es crea una cua i un worker compartint una connexió a Redis, i es registra el scheduler mitjançant el mètode upsertJobScheduler. Per exemple, un patró com */10 * * * * * genera un heartbeat cada deu segons, mentre que un cron amb fus horari específic permet executar neteges diàries a les 03:15 hora local. És fonamental recordar que el worker ha d'estar actiu per consumir els treballs; en cas contrari, s'acumularan a Redis. També és important evitar l'opció repeat obsoleta en favor de l'API de schedulers introduïda a BullMQ 5.16+.
En l'ecosistema NestJS, la integració es simplifica gràcies al mòdul @nestjs/bullmq. Es configura una connexió Redis global, es registra la cua com a proveïdor i s'injecta en un servei que implementa OnModuleInit per fer upsert dels schedulers en iniciar l'aplicació. Els treballadors es defineixen com a classes decorades amb @Processor, heretant de WorkerHost. Aquest patró garanteix que cada desplegament actualitzi els schedulers existents sense duplicar-los, mantenint la identitat estable mitjançant un identificador únic.
Entre les millors pràctiques operatives destaquen: tancar correctament el worker i la cua en senyals SIGINT/SIGTERM, utilitzar getJobSchedulers per inspeccionar els schedulers actius, i emprar removeJobScheduler per eliminar programacions obsoletes. És crucial no barrejar pattern i every en un mateix scheduler, i especificar el fus horari quan l'hora local és rellevant. Així mateix, sota càrregues elevades els intervals poden allargar-se perquè BullMQ programa el següent treball només quan l'anterior comença a processar-se.
En entorns empresarials, combinar BullMQ amb serveis cloud com AWS o Azure potencia l'escalabilitat i la resiliència. Per exemple, allotjar Redis a ElastiCache o Azure Cache for Redis, i desplegar els workers en contenidors orquestrats, permet gestionar pics de càrrega sense perdre treballs programats. A Q2BSTUDIO desenvolupem aplicacions a mida que integren aquests patrons, oferint solucions robustes per a automatització de processos i gestió de tasques crítiques. A més, les nostres capacitats abasten automatització de processos amb cues de missatges, intel·ligència artificial per a empreses, agents IA, ciberseguretat, i serveis d'intel·ligència de negoci amb Power BI, tot sobre infraestructures cloud AWS i Azure.
En resum, BullMQ Job Schedulers representen una evolució natural respecte als temporitzadors en procés quan es requereix fiabilitat, concurrència i observabilitat. El seu ús és especialment recomanat en arquitectures multi-instància i en combinació amb altres sistemes de cues. Des de Q2BSTUDIO, acompanyem les organitzacions en la implementació d'aquestes tecnologies, així com en el desenvolupament de programari a mida que integra schedulers, cloud, IA i business intelligence per impulsar la transformació digital.

.jpg)
