BullMQ is a job queue library you import into your app. RabbitMQ is a message broker you run as a separate server and reach from any AMQP client.
Background and scheduled jobs inside one app: BullMQ. Routing events between services written in different languages: RabbitMQ.
BullMQ 6, released July 30, 2026, added a PostgreSQL backend. It needs PostgreSQL 13 or newer and the pg package. Redis is still the default.
Since RabbitMQ 4.4, quorum queues hold a message until the time set in the x-opt-delivery-time header. The old delayed message plugin is no longer maintained.
BullMQ Job Schedulers take a cron pattern and a time zone. RabbitMQ has no built-in cron, so recurring work needs a separate process that publishes.
BullMQ: attempts with fixed or exponential backoff and a failed set you can inspect. RabbitMQ: delivery limit, dead lettering and delayed retry with linear backoff.
BullMQ has a global limiter per queue and can pause on a 429. RabbitMQ prefetch caps unacked messages, which limits concurrency, not requests per second.
Neither is a job scheduler. Kafka is a log for event streams, and SQS delay queues top out at 15 minutes.
Keep the post in your database as the source of truth and only enqueue jobs that are due soon, with a deterministic job id.
The guide has a feature table, BullMQ code for a delayed job, a cron scheduler and a rate-limited worker, plus a checklist for scheduled posts.
postgate.studio