You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:01:00