Повторяющиеся задания не запускаются в заданное время cron в Bull

#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.