BullMQ延迟任务处理异常:仅首个任务生效后续无延迟
BullMQ批量添加延迟任务仅首个生效,后续任务无延迟连续执行
我用BullMQ向队列添加任务,设置15秒延迟执行,相关代码如下:
// REDIS CONFIG const redis = new Redis(<REDIS_CONFIG>, { maxRetriesPerRequest: null, }) // QUEUE DEFINITION const myQueue = new Queue(<QUEUE_NAME>, { defaultJobOptions: { removeOnComplete: true }, connection: redis, }) // QUEUE HANDLER const queueHandler = async (job: Job) => { const { id } = job.data console.log(`Processing job ${id} after delay:`, new Date()) } // WORKER DEFINITION const sendWorker = new Worker(<QUEUE_NAME>, queueHandler, { concurrency: 1, connection: redis }) // ON COMPLETE EVENT sendWorker.on('completed', async (job: Job) => { // SOME CODE HERE }) // ON FAIL EVENT sendWorker.on('failed', async (job: any, error: Error) => { // SOME CODE HERE })
在另一个文件中批量添加任务:
const some_objects = [{id: '1'}, {id: '2'}, {id: '3'}] for (const object of some_objects) { console.log('Adding job to queue:', object, ' at: ', new Date()) myQueue.add(<JOB_NAME>, {id: object.id}, {delay: 15000}).catch(console.error) }
(注:修正了原代码中for循环的语法错误,将冒号改为JS标准的大括号)
按官方文档用delay参数设置延迟,但实际只有首个任务等待15秒后执行,后续任务无延迟连续执行,控制台输出:
添加任务到队列: { id: '1' } 时间: 2024-09-02T15:08:11.421Z
添加任务到队列: { id: '2' } 时间: 2024-09-02T15:08:11.426Z
添加任务到队列: { id: '3' } 时间: 2024-09-02T15:08:11.426Z
处理任务1(延迟后): 2024-09-02T15:08:26.488Z // 注:已过15秒
处理任务2(延迟后): 2024-09-02T15:08:27.129Z // 预期:延迟15秒后处理
处理任务3(延迟后): 2024-09-02T15:08:27.425Z // 预期:延迟15秒后处理
我已经尝试以下方案但都没有效果:
- 在Queue默认任务选项中设置delay
const myQueue = new Queue(<QUEUE_NAME>, { defaultJobOptions: { removeOnComplete: true, delay: 15000 }, connection: redis, }) - 使用forEach替代for of添加任务
- 逐个添加任务
- 使用不同任务名称添加任务
- 检查Redis中的队列,通过
KEYS *和ZRANGE bull:<queue_name>:delayed 0 -1确认任务已存入delayed集合,但仍未按预期执行。当前仅启动1个Worker,并发数为1。
内容的提问来源于stack exchange,提问作者rrcabrera9625
相关产品推荐
相关产品推荐

