|
1 |
| -import { Queue, Worker, Job, QueueEvents, RedisOptions } from 'bullmq' |
| 1 | +import { Queue, Worker, Job, QueueEvents, RedisOptions, KeepJobs } from 'bullmq' |
2 | 2 | import { v4 as uuidv4 } from 'uuid'
|
3 | 3 | import logger from '../utils/logger'
|
4 | 4 |
|
5 | 5 | const QUEUE_REDIS_EVENT_STREAM_MAX_LEN = process.env.QUEUE_REDIS_EVENT_STREAM_MAX_LEN
|
6 | 6 | ? parseInt(process.env.QUEUE_REDIS_EVENT_STREAM_MAX_LEN)
|
7 | 7 | : 10000
|
8 | 8 | const WORKER_CONCURRENCY = process.env.WORKER_CONCURRENCY ? parseInt(process.env.WORKER_CONCURRENCY) : 100000
|
| 9 | +const REMOVE_ON_AGE = process.env.REMOVE_ON_AGE ? parseInt(process.env.REMOVE_ON_AGE) : -1 |
| 10 | +const REMOVE_ON_COUNT = process.env.REMOVE_ON_COUNT ? parseInt(process.env.REMOVE_ON_COUNT) : -1 |
9 | 11 |
|
10 | 12 | export abstract class BaseQueue {
|
11 | 13 | protected queue: Queue
|
@@ -34,7 +36,24 @@ export abstract class BaseQueue {
|
34 | 36 |
|
35 | 37 | public async addJob(jobData: any): Promise<Job> {
|
36 | 38 | const jobId = jobData.id || uuidv4()
|
37 |
| - return await this.queue.add(jobId, jobData, { removeOnFail: true }) |
| 39 | + |
| 40 | + let removeOnFail: number | boolean | KeepJobs | undefined = true |
| 41 | + let removeOnComplete: number | boolean | KeepJobs | undefined = undefined |
| 42 | + |
| 43 | + // Only override removal options if age or count is specified |
| 44 | + if (REMOVE_ON_AGE !== -1 || REMOVE_ON_COUNT !== -1) { |
| 45 | + const keepJobObj: KeepJobs = {} |
| 46 | + if (REMOVE_ON_AGE !== -1) { |
| 47 | + keepJobObj.age = REMOVE_ON_AGE |
| 48 | + } |
| 49 | + if (REMOVE_ON_COUNT !== -1) { |
| 50 | + keepJobObj.count = REMOVE_ON_COUNT |
| 51 | + } |
| 52 | + removeOnFail = keepJobObj |
| 53 | + removeOnComplete = keepJobObj |
| 54 | + } |
| 55 | + |
| 56 | + return await this.queue.add(jobId, jobData, { removeOnFail, removeOnComplete }) |
38 | 57 | }
|
39 | 58 |
|
40 | 59 | public createWorker(concurrency: number = WORKER_CONCURRENCY): Worker {
|
|
0 commit comments