Currently we have 3 available methods in queue class:
Drain
Removes all jobs that are waiting or delayed, but not active, waiting-children, completed or failed.
import { Queue } from 'bullmq';
const queue = new Queue('paint');
await queue.drain();import asyncio
from bullmq import Queue
async def main():
queue = Queue('paint')
await queue.drain()
await queue.close()
asyncio.run(main())alias BullMQ.Queue
:ok = Queue.drain("paint", connection: :redis)<?php
use BullMQ\Queue;
$queue = new Queue('paint');
$queue->drain();
$queue->close();
?>use bullmq::{Queue, QueueOptions};
let queue = Queue::new("paint", QueueOptions::default()).await?;
queue.drain(false).await?;You can also drain delayed jobs by setting the delayed parameter:
import { Queue } from 'bullmq';
const queue = new Queue('paint');
// Also drain delayed jobs
await queue.drain(true);import asyncio
from bullmq import Queue
async def main():
queue = Queue('paint')
# Also drain delayed jobs
await queue.drain(delayed=True)
await queue.close()
asyncio.run(main())alias BullMQ.Queue
# Also drain delayed jobs
:ok = Queue.drain("paint", delayed: true, connection: :redis)<?php
use BullMQ\Queue;
$queue = new Queue('paint');
// Also drain delayed jobs
$queue->drain(true);
$queue->close();
?>use bullmq::{Queue, QueueOptions};
let queue = Queue::new("paint", QueueOptions::default()).await?;
// Also drain delayed jobs
queue.drain(true).await?;WARNING
Parent jobs that belong to the queue being drained will be kept in waiting-children status if they have pending children, but if they do not have any pending children they will just be removed.
WARNING
Parent jobs in queues different from the one being drained will either stay in waiting-children if they have pending children in other queues, or just moved to wait.
Clean
Removes jobs in a specific state, but keeps jobs within a certain grace period.
import { Queue } from 'bullmq';
const queue = new Queue('paint');
const deletedJobIds = await queue.clean(
60000, // 1 minute
1000, // max number of jobs to clean
'paused',
);Obliterate
Completely obliterates a queue and all of its contents.
import { Queue } from 'bullmq';
const queue = new Queue('paint');
await queue.obliterate();import asyncio
from bullmq import Queue
async def main():
queue = Queue('paint')
await queue.obliterate()
await queue.close()
asyncio.run(main())alias BullMQ.Queue
:ok = Queue.obliterate("paint", connection: :redis)<?php
use BullMQ\Queue;
$queue = new Queue('paint');
$queue->obliterate();
$queue->close();
?>use bullmq::{Queue, QueueOptions};
let queue = Queue::new("paint", QueueOptions::default()).await?;
queue.obliterate(false, 1000).await?;For more advanced scenarios where you need to force obliteration even with active jobs:
import { Queue } from 'bullmq';
const queue = new Queue('paint');
// Force obliteration even with active jobs
await queue.obliterate({ force: true });import asyncio
from bullmq import Queue
async def main():
queue = Queue('paint')
# Force obliteration even with active jobs
await queue.obliterate(force=True)
await queue.close()
asyncio.run(main())alias BullMQ.Queue
# Force obliteration even with active jobs
:ok = Queue.obliterate("paint", force: true, connection: :redis)<?php
use BullMQ\Queue;
$queue = new Queue('paint');
// Force obliteration even with active jobs
$queue->obliterate(['force' => true]);
$queue->close();
?>use bullmq::{Queue, QueueOptions};
let queue = Queue::new("paint", QueueOptions::default()).await?;
// Force obliteration even with active jobs
queue.obliterate(true, 1000).await?;WARNING
Parent jobs in queues different from the one being obliterated will either stay in waiting-children if they have pending children in other queues, or just moved to wait.