在 Bull 中给定的 cron 时间不会触发可重复的作业

Repeatable jobs not getting triggered at given cron timing in Bull

我想使用 Bull NPM 并行执行一些数据处理,并在给定的 cron 时间开始处理每个作业

const Queue = require("bull"),
        
     /**
     *  initialize the queue for executing cron jobs
     **/
    
     this.workQueue = new Queue(this.queueOptions.name, {
          redis: redisConfig
     });
        
        
         this.workQueue.process((job, done) => {
              done();
              this.processJob(job)
                .then(data => {
                  global.logger.info(`successfully-executed-job ${job.id}`);
                })
                .catch(error => {
                  global.logger.error(`JSON.stringify(error)}-in-executing-job-${job.id}`); 
                });
            });
        
    // here I have included Unique JobId     
        
    this.workQueue.add({}, {repeat: { cron:"5 * * * *",jobId:Date.now()});

有什么实现相同目标的建议吗?

问题现已解决,如果您遇到同样的问题,请确保您指的是正确的时区。

干杯!!

我也遇到了同样的问题。关于上述代码需要注意的一件事是未初始化 Queuescheduler 实例。当然,时区也起着至关重要的作用。但是如果没有队列调度程序实例(与队列同名),作业就不会添加到队列中。 Queuescheduler 实例充当簿记员。还要注意一个更重要的参数“limit”。如果您不将限制设置为 1,则在特定时间安排的作业将无限次触发。

例如:运行 在德国时间 22:30 每天的工作配置如下:

    repeat: { 
        cron: '* 30 22 * * *',
        offset: datetime.getTimezoneOffset(),
        tz: 'Europe/Berlin',
        limit: 1
    }

参考:https://docs.bullmq.io/guide/queuescheduler在上面link中,文档清楚地提到队列调度器实例负责作业的簿记。

在这个link - https://docs.bullmq.io/guide/jobs/repeatable中,文档特别警告我们确保我们实例化一个Queuescheduler实例。