使用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);
这些是我面临的问题
有些亮点会被认可
答案 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()吗?如果您需要执行其他异步操作,这不是一个简单的调用。