Feature/Add remove on age and count to bullmq (#4249)

add remove on age and count to bullmq
This commit is contained in:
Henry Heng 2025-04-03 16:07:10 +08:00 committed by GitHub
parent dd56d03b78
commit 8e63b999b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 39 additions and 8 deletions

View File

@ -86,6 +86,8 @@ BLOB_STORAGE_PATH=/root/.flowise/storage
# QUEUE_NAME=flowise-queue
# QUEUE_REDIS_EVENT_STREAM_MAX_LEN=100000
# WORKER_CONCURRENCY=100000
# REMOVE_ON_AGE=86400
# REMOVE_ON_COUNT=10000
# REDIS_URL=
# REDIS_HOST=localhost
# REDIS_PORT=6379

View File

@ -38,6 +38,8 @@ services:
- WORKER_CONCURRENCY=${WORKER_CONCURRENCY}
- QUEUE_NAME=${QUEUE_NAME}
- QUEUE_REDIS_EVENT_STREAM_MAX_LEN=${QUEUE_REDIS_EVENT_STREAM_MAX_LEN}
- REMOVE_ON_AGE=${REMOVE_ON_AGE}
- REMOVE_ON_COUNT=${REMOVE_ON_COUNT}
- REDIS_URL=${REDIS_URL}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
@ -50,11 +52,11 @@ services:
ports:
- '${PORT}:${PORT}'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${PORT}/api/v1/ping"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
test: ['CMD', 'curl', '-f', 'http://localhost:${PORT}/api/v1/ping']
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
- ~/.flowise:/root/.flowise
entrypoint: /bin/sh -c "sleep 3; flowise start"

View File

@ -38,6 +38,8 @@ services:
- WORKER_CONCURRENCY=${WORKER_CONCURRENCY}
- QUEUE_NAME=${QUEUE_NAME}
- QUEUE_REDIS_EVENT_STREAM_MAX_LEN=${QUEUE_REDIS_EVENT_STREAM_MAX_LEN}
- REMOVE_ON_AGE=${REMOVE_ON_AGE}
- REMOVE_ON_COUNT=${REMOVE_ON_COUNT}
- REDIS_URL=${REDIS_URL}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}

View File

@ -83,6 +83,8 @@ PORT=3000
# QUEUE_NAME=flowise-queue
# QUEUE_REDIS_EVENT_STREAM_MAX_LEN=100000
# WORKER_CONCURRENCY=100000
# REMOVE_ON_AGE=86400
# REMOVE_ON_COUNT=10000
# REDIS_URL=
# REDIS_HOST=localhost
# REDIS_PORT=6379

View File

@ -61,6 +61,8 @@ export abstract class BaseCommand extends Command {
WORKER_CONCURRENCY: Flags.string(),
QUEUE_NAME: Flags.string(),
QUEUE_REDIS_EVENT_STREAM_MAX_LEN: Flags.string(),
REMOVE_ON_AGE: Flags.string(),
REMOVE_ON_COUNT: Flags.string(),
REDIS_URL: Flags.string(),
REDIS_HOST: Flags.string(),
REDIS_PORT: Flags.string(),
@ -196,6 +198,8 @@ export abstract class BaseCommand extends Command {
if (flags.REDIS_CA) process.env.REDIS_CA = flags.REDIS_CA
if (flags.WORKER_CONCURRENCY) process.env.WORKER_CONCURRENCY = flags.WORKER_CONCURRENCY
if (flags.QUEUE_NAME) process.env.QUEUE_NAME = flags.QUEUE_NAME
if (flags.QUEUE_REDIS_EVENT_STREAM_MAX_LEN) process.env.QUEUE_REDIS_EVENT_STREAM_MAX_LEN = flags.QUEUE_REDIS_EVENT_STREAM
if (flags.QUEUE_REDIS_EVENT_STREAM_MAX_LEN) process.env.QUEUE_REDIS_EVENT_STREAM_MAX_LEN = flags.QUEUE_REDIS_EVENT_STREAM_MAX_LEN
if (flags.REMOVE_ON_AGE) process.env.REMOVE_ON_AGE = flags.REMOVE_ON_AGE
if (flags.REMOVE_ON_COUNT) process.env.REMOVE_ON_COUNT = flags.REMOVE_ON_COUNT
}
}

View File

@ -1,4 +1,4 @@
import { Queue, Worker, Job, QueueEvents, RedisOptions } from 'bullmq'
import { Queue, Worker, Job, QueueEvents, RedisOptions, KeepJobs } from 'bullmq'
import { v4 as uuidv4 } from 'uuid'
import logger from '../utils/logger'
@ -6,6 +6,8 @@ const QUEUE_REDIS_EVENT_STREAM_MAX_LEN = process.env.QUEUE_REDIS_EVENT_STREAM_MA
? parseInt(process.env.QUEUE_REDIS_EVENT_STREAM_MAX_LEN)
: 10000
const WORKER_CONCURRENCY = process.env.WORKER_CONCURRENCY ? parseInt(process.env.WORKER_CONCURRENCY) : 100000
const REMOVE_ON_AGE = process.env.REMOVE_ON_AGE ? parseInt(process.env.REMOVE_ON_AGE) : -1
const REMOVE_ON_COUNT = process.env.REMOVE_ON_COUNT ? parseInt(process.env.REMOVE_ON_COUNT) : -1
export abstract class BaseQueue {
protected queue: Queue
@ -34,7 +36,24 @@ export abstract class BaseQueue {
public async addJob(jobData: any): Promise<Job> {
const jobId = jobData.id || uuidv4()
return await this.queue.add(jobId, jobData, { removeOnFail: true })
let removeOnFail: number | boolean | KeepJobs | undefined = true
let removeOnComplete: number | boolean | KeepJobs | undefined = undefined
// Only override removal options if age or count is specified
if (REMOVE_ON_AGE !== -1 || REMOVE_ON_COUNT !== -1) {
const keepJobObj: KeepJobs = {}
if (REMOVE_ON_AGE !== -1) {
keepJobObj.age = REMOVE_ON_AGE
}
if (REMOVE_ON_COUNT !== -1) {
keepJobObj.count = REMOVE_ON_COUNT
}
removeOnFail = keepJobObj
removeOnComplete = keepJobObj
}
return await this.queue.add(jobId, jobData, { removeOnFail, removeOnComplete })
}
public createWorker(concurrency: number = WORKER_CONCURRENCY): Worker {