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



我想使用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实例(与Queue同名(,则不会将作业添加到队列中。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实例。

相关内容

  • 没有找到相关文章

最新更新