The Jobs page lets you browse, search, and manage individual jobs across all your queues. Investigate failures, retry jobs, and view detailed job information.
Job Browser
The job browser displays jobs in a table with filtering and sorting options.
| Column | Description |
|---|
| ID | Unique job identifier |
| Name | Job type/name |
| Queue | Which queue the job belongs to |
| Status | Current job state |
| Created | When the job was added to the queue |
| Processed | When the job started processing |
| Finished | When the job completed or failed |
| Progress | Job progress percentage (if reported) |
Filtering Jobs
By Status
Filter jobs by their current state using the status tabs:
| Status | Description |
|---|
| All | Show all jobs |
| Waiting | Jobs ready to be processed |
| Active | Jobs currently being processed |
| Completed | Successfully finished jobs |
| Failed | Jobs that threw errors |
| Delayed | Jobs scheduled for later |
By Queue
Use the queue dropdown to filter jobs from a specific queue:
- All Queues: Show jobs from all queues
- Specific Queue: Show jobs from selected queue only
By Name
Search for jobs by name/type:
- Enter the job name in the search field
- Results filter in real-time
Use name filtering to find all instances of a specific job type when debugging issues.
Sorting
Sort jobs by different criteria:
| Sort Option | Description |
|---|
| Timestamp | When the job was created (default) |
| Processed On | When processing started |
| Finished On | When the job completed |
| Progress | Job progress percentage |
Toggle between ascending and descending order.
Job Details
Click on any job to view its full details.
Key information about the job:
- Job ID: Unique identifier
- Queue: Parent queue name
- Status: Current state with visual badge
- Attempts: Number of processing attempts
- Max Attempts: Configured retry limit
Job Data
View the complete job payload as formatted JSON:
{
"userId": "user_123",
"action": "send-welcome-email",
"data": {
"email": "user@example.com",
"template": "welcome-v2"
}
}
Job data is displayed in a collapsible JSON viewer for easy navigation of nested objects.
Job Timeline
See the complete lifecycle of the job:
| Event | Description |
|---|
| Created | Job added to queue |
| Waiting | Job in waiting state |
| Delayed | Job in delayed state (if applicable) |
| Active | Processing started |
| Progress | Progress updates (if reported) |
| Completed | Successfully finished |
| Failed | Error occurred |
Stack Trace (Failed Jobs)
For failed jobs, view the complete error information:
- Error message
- Stack trace
- Attempt number when failed
Error: Connection refused to payment gateway
at PaymentService.charge (/app/services/payment.js:45:11)
at processJob (/app/workers/orders.js:23:5)
at Worker.processJob (/node_modules/bullmq/...)
Job Actions
Retry Job
Retry a failed job to process it again:
Find the failed job
Filter by Failed status to see failed jobs.
Open job details
Click on the job to view its details.
Click Retry
Click the Retry button. The job will be moved back to the waiting state.
Retrying a job will process it again with the same data. Ensure the underlying issue is resolved first.
When to retry:
- Transient errors (network timeouts, service unavailable)
- After fixing a bug in the worker code
- After resolving external service issues
Remove Job
Permanently delete a job from the queue:
Select the job
Click on the job you want to remove.
Click Remove
Click the Remove button.
Confirm
Confirm the deletion. This action cannot be undone.
Removing a job is permanent. The job data will be lost and cannot be recovered.
When to remove:
- Test jobs that shouldn’t be processed
- Duplicate jobs
- Jobs with invalid data that will never succeed
Bulk Operations
For managing multiple jobs, consider using:
- Status filters to view groups of jobs
- The BullMQ API directly for bulk operations
- Queue-level operations (pause/resume) for broader control
Jobs are paginated for performance:
- Default: 100 jobs per page
- Navigate between pages with pagination controls
- Total count shown for filtered results
Access Modes
Job operations depend on your connection’s access mode:
| Operation | Read-Write | Read-Only |
|---|
| View jobs | Yes | Yes |
| View job details | Yes | Yes |
| Retry job | Yes | No |
| Remove job | Yes | No |
Best Practices
Debugging Failed Jobs
- Filter by Failed status
- Sort by Finished On (newest first)
- Open the job to view the stack trace
- Check the job data for invalid inputs
- Review the timeline to understand when the failure occurred
Monitoring Active Jobs
- Long-running active jobs may indicate stuck workers
- Check the Processed On time for active jobs
- If a job has been active for too long, the worker may have crashed
Cleaning Up Old Jobs
BullMQ has built-in job retention settings. Configure in your worker:
const queue = new Queue('my-queue', {
defaultJobOptions: {
removeOnComplete: {
age: 3600, // Keep for 1 hour
count: 1000 // Keep last 1000
},
removeOnFail: {
age: 86400 // Keep failed jobs for 24 hours
}
}
});
Next Steps