1

我想使用 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()});

有什么建议可以达到同样的效果吗?

4

2 回答 2

0

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

干杯!!

于 2020-12-11T14:09:09.677 回答
0

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

例如:要在德国时间每天 22:30 运行作业,配置如下所示:

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

参考:https : //docs.bullmq.io/guide/queuescheduler 在上面的这个链接中,文档清楚地提到 queuescheduler 实例负责记录工作。

在此链接 - https://docs.bullmq.io/guide/jobs/repeatable中,文档特别警告我们要确保我们实例化 Queuescheduler 实例。

于 2021-09-16T20:18:50.307 回答