#node.js #cron #job-scheduling #bullmq
#node.js #cron #планирование заданий #bullmq
Вопрос:
Я хотел выполнить некоторую обработку данных параллельно, используя 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()});
Есть предложения по достижению того же?
Комментарии:
1. Вы нашли решение для этого?
2. Да, @ChrisEdwards проблема решена, задание cron запускалось в нужное время, но я имел в виду неправильный часовой пояс.
Ответ №1:
Теперь проблема решена, если вы столкнулись с той же проблемой, убедитесь, что вы ссылаетесь на правильный часовой пояс.
Приветствия!!
Ответ №2:
Я также столкнулся с этой же проблемой. Следует отметить одну вещь в отношении приведенного выше кода: экземпляр Queuescheduler не инициализирован. Конечно, часовой пояс также играет решающую роль. Но без экземпляра Queuescheduler (который имеет то же имя, что и очередь), задания не добавляются в очередь. Экземпляр Queuescheduler действует как хранитель книги. Также позаботьтесь о еще одном важном параметре «limit». Если вы не установите ограничение на 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.