我想使用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实例。