节点JS Agenda调度程序 - 缺少计划任务

时间:2014-02-05 13:46:19

标签: javascript node.js scheduler

使用Agenda插件作为调度程序(以及快递)

这是我的代码

var express = require('express');
var Agenda = require('agenda');


var agenda = new Agenda({db: { address: 'localhost:27017/express'}});
var app= express();

app.get('/notify', function(req,res){
    res.type('text/plain');
    var message = req.param('message');
    agenda.now('send reminder', {data:message});    

    res.send(message);  
});

    agenda.define('send reminder', function(job,done){
        console.log(job.attrs.data.data);
    });


agenda.start();
app.listen(80);

这些是我面临的问题

  • 并非所有邮件都已打印
  • 有时候邮件会被多次打印。
  • 10次通话(大约)后,调度程序将永久停止
  • 调用预定的
  • 至少有2秒的延迟

有些亮点会被认可

2 个答案:

答案 0 :(得分:4)

我的代码中的问题是,我忘了调用done()方法

应该是

agenda.define('send reminder', function(job,done){
        console.log(job.attrs.data.data);
done();

    });

agenda.define('send reminder', function(job){
        console.log(job.attrs.data.data);
    });

答案 1 :(得分:3)

我使用Agenda设置了如下测试

var agenda = new Agenda();
agenda.database(config.db.host + ':' + config.db.port + '/' + config.db.name, 'jobs')
var i = 0;
agenda.define('some job', function(job) {
i++;
console.log( i+ " Run at " + new Date().getMinutes() + ":" + new Date().getSeconds());
});
agenda.every('10 seconds', 'some job');
agenda.start();

输出如下 -

  

1在56:59运行

     

2在57:13运行

     

3在57:28运行

     

4在57:43运行

     

5在57:58运行

     

6在58:13运行

     

依旧......

我让工作运行了3个小时,我仍然看到它正在运行。我没有看到你的前三个观察中的任何一个。我确实看到每次运行的延迟时间约为5秒,正如第二次打印所看到的那样。这可能是因为我遇到的远程数据库导致的mongo延迟和/或由于日志打印延迟。我之前使用过Agenda,如果你需要以精确的秒数执行你的工作,我认为你不应该使用它。

顺便说一句,为什么你会为now事件使用调度程序,你不需要在需要登录时使用console.log()吗?如果您需要执行其他异步操作,这不是一个简单的调用。