【问题标题】:Repeatable jobs not getting triggered at given cron timing in BullBull 在给定的 cron 时间未触发可重复作业
【发布时间】:2021-09-17 04:24:35
【问题描述】:

我想使用 Bull NPM 并行执行一些数据处理,并在给定的 cron Time 开始处理每个作业

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()});

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

【问题讨论】:

  • 你想出解决方案了吗?
  • 是的@ChrisEdwards 问题已解决 cron 作业在正确的时间被触发,但我指的是错误的时区。

标签: node.js cron job-scheduling bullmq


【解决方案1】:

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

干杯!!

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。关于上述代码需要注意的一点是 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 实例。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2017-07-26
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多