Agenda.js作业调度,作业重复和循环

时间:2016-07-20 14:37:24

标签: node.js google-cloud-messaging job-scheduling

提前感谢任何阅读此内容的人。

我需要能够在特定时间将gcm消息(通知)发送到客户端ID列表。

我正在尝试使用Agenda.js,因为它有一个持久层。

以下代码似乎最初工作得很好,完全按照它应该执行。但是,经过一段时间让服务器无所事事,该作业将开始循环执行。

它还包括

“警告:过去的日期。永远不会被解雇。”

这是相关代码。

@AppModule({
  // modules: [MyModule],
  providers: [...]
  pipes: [OtherPipe]
})
class MyModule {}

bootstrap(AppCmp, {modules: [RouterModule, MyModule])

有没有人知道为什么会发生这种情况?有关如何调试此问题的任何提示?

谢谢!

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。我添加了job.remove功能,它不再是spazzes。

var agenda = new agenda({db: {address: configParams.db}});

schedule_notifications = function(req) {

// define an agenda task named notify
    agenda.define('notify', function(job, done) {

     // create a gcm message
        var message = new gcm.Message({
            notification: { "body": 'test' }
        });
        var sender = new gcm.Sender('server id');
        var regTokens = ['phone id'];

        // send the message
        sender.send(message, { registrationTokens: regTokens }, function(err, response) {
            if (err) console.error(err);
            else console.log(response);
            done();
        });
    job.remove(function(err) {
      if(!err) console.log("Successfully removed job from collection");
    })
    });


    // get the object from the request
    var req_json = JSON.parse(req.body.data),
        keys = Object.keys(req_json),
        key_string = keys[0],
        start_obj = new Date(req_json[key_string][0].start);

    // schedule the job with the date object found in the request
    // start_obj, for example could be made using
    // start_obj = new Date();
    // notify is the name of the job to run

    agenda.schedule(start_obj, 'notify');
    agenda.start();

// can comment agenda.schedule and uncomment the following line to delete the unfinished jobs in db
// agenda.purge(function(err, numRemoved) {});    
}