| name | bullmq-queue-debug |
| description | BullMQ job queue debugging for Volatio, redis-cli inspection patterns, checking stuck/failed/completed jobs, avoiding bun --eval hangs with queue connections. Use when jobs stuck, queue inspection needed, or debugging background workers. |
bullmq-queue-debug
When to Use
- Jobs appear stuck or not processing
- Need to inspect queue state (waiting, completed, failed)
- Debugging background job workers
- Checking if jobs are being added correctly
Golden Path: Check Queue via Redis Directly
Never use bun --eval with BullMQ imports - it hangs because Redis connections don't close.
docker exec volatio-redis-1 redis-cli LLEN bull:news.yahoo-sync:wait
docker exec volatio-redis-1 redis-cli ZCARD bull:news.yahoo-sync:completed
docker exec volatio-redis-1 redis-cli ZCARD bull:news.yahoo-sync:failed
Common Queue Names
| Queue | Pattern |
|---|
| Yahoo News Sync | bull:news.yahoo-sync:* |
| Economic Calendar | bull:calendar.sync:* |
Redis Queue Key Patterns
docker exec volatio-redis-1 redis-cli KEYS 'bull:*'
docker exec volatio-redis-1 redis-cli LLEN bull:<queue-name>:wait
docker exec volatio-redis-1 redis-cli ZCARD bull:<queue-name>:completed
docker exec volatio-redis-1 redis-cli ZCARD bull:<queue-name>:failed
docker exec volatio-redis-1 redis-cli ZCARD bull:<queue-name>:delayed
Inspecting Job Data
docker exec volatio-redis-1 redis-cli LRANGE bull:news.yahoo-sync:wait 0 10
docker exec volatio-redis-1 redis-cli HGETALL bull:news.yahoo-sync:<job-id>
If You MUST Use TypeScript to Check Queues
Create a dedicated script file that explicitly closes connections:
import { yahooNewsSyncQueue } from '../domains/news/yahoo-sync.job';
async function main() {
const job = await yahooNewsSyncQueue.getJob('yahoo-sync-2025-01-15');
console.log('Status:', await job?.getState());
console.log('Result:', job?.returnvalue);
await yahooNewsSyncQueue.close();
}
main();
Then run:
bun run --env-file ../../.env packages/jobs/src/scripts/check-queue-status.ts 2>&1
Don'ts
Never Use bun --eval with BullMQ
bun --eval "
import { yahooNewsSyncQueue } from './src/domains/news/yahoo-sync.job';
const job = await yahooNewsSyncQueue.getJob('job-id');
console.log(job?.returnvalue);
process.exit(0); // Still hangs!
"
Why it hangs:
- BullMQ maintains persistent Redis connections
process.exit(0) doesn't cleanly close connections
- Multiple connections from eval scripts conflict with workers
Clearing Stuck Queues
docker exec volatio-redis-1 redis-cli DEL bull:news.yahoo-sync:wait
docker exec volatio-redis-1 redis-cli DEL bull:news.yahoo-sync:failed
docker exec volatio-redis-1 redis-cli KEYS 'bull:news.yahoo-sync:*' | xargs docker exec volatio-redis-1 redis-cli DEL
Verify Redis is Running
docker compose ps | grep redis
docker exec volatio-redis-1 redis-cli PING