Node-cron provides cron-based scheduling for periodic tasks: cron.schedule('0 * * * *', () => sendEmails()). Simple for single-instance apps.
BullMQ (built on Redis) handles distributed job queues with priorities, retries, rate limiting, and delayed jobs. It scales across multiple server instances.
Job patterns: send email newsletters weekly, generate reports nightly, clean temporary files hourly, sync data from APIs periodically.
BullMQ features: job retries with exponential backoff, job progress tracking, job rate limiting, flow for chaining dependent jobs, and workers that process jobs concurrently.
Monitoring: Bull Board provides a web UI for job queue monitoring. Track failed jobs, retry counts, and processing times.
For simple cron needs, node-cron works. For production job queues with reliability requirements, use BullMQ with Redis.