Monitor BullMQ and Bull Queue Jobs with CronRabbit
Node.jsThe Problem
BullMQ repeatable jobs can fail silently if Redis is down, the worker crashes, or the job throws an unhandled error. Bull's built-in retry doesn't notify you of persistent failures.
The Solution
Add CronRabbit pings inside your worker processor function. Each repeatable job gets its own monitor for independent tracking.
Queue Job Monitoring Challenges
BullMQ manages retries internally, but after max retries are exhausted, the job moves to 'failed' state silently. CronRabbit detects this because the expected success ping never arrives.
Per-Job vs Per-Queue Monitoring
For repeatable/cron-like jobs, create one CronRabbit monitor per job type. For one-off jobs, monitor the overall queue health by pinging on completion events.
Code Examples
BullMQ repeatable job monitoring
JavaScriptconst { Queue, Worker } = require("bullmq");
const queue = new Queue("email-digest");
// Add repeatable job (runs daily at 8 AM)
await queue.add("send-digest", {}, {
repeat: { cron: "0 8 * * *" }
});
new Worker("email-digest", async (job) => {
const PING = "https://ping.cronrabbit.com/digest-id";
await fetch(`${PING}/start`);
try {
await sendDigestEmails();
await fetch(PING);
} catch (err) {
await fetch(`${PING}/fail`);
throw err;
}
});