我正在使用node.js和mongodb构建一个Web应用程序.我需要添加延迟的工作.例如,在注册后一个月向用户发送电子邮件.我没有找到除Kue之外的延迟作业的现有解决方案,但它使用Redis,我更愿意在将另一个资源添加到我的Web应用程序之前使用我现有的Mongodb.
有没有现成的解决方案?
我有一个非常简单的逻辑问题.
我将在一个单独的应用服务器上运行作业处理逻辑.
我的工作处理应用程序将是一个独立的应用程序,无需处理任务.
在我的代码中,如何确保我的应用程序不断检查redis服务器的作业? - 我需要在无限循环中运行代码吗? - 或者我需要继续重新启动我的应用程序
或者在Kue有一些内置的机制,我在这里失踪了?
谢谢
在我的webapp中,用户可以创建需要生成并在每个月的某些日期发送的定期发票.例如,可能需要在每个月的5号发送发票.
我正在使用Kue来处理我所有的后台工作,所以我也想在这种情况下这样做.
我目前的解决方案是每小时setInterval()创建一份processRecurringInvoices工作.然后,此作业将从数据库中查找所有定期发票,并generateInvoice为每个定期发票创建单独的作业.
然后,generateInvoice作业将实际生成发票,如果需要,还将创建sendInvoiceToEmail将通过电子邮件发送发票的作业.
目前这个解决方案对我来说很好,因为它有一个很好的关注点,但是,我有以下问题:
processRecurringInvoices工作上调用done()之前,我不确定是否应该等待所有"子"工作完成?processRecurringInvoices工作岗位,还是应该为每项工作单独处理?processRecurringInvoices或任何子作业仍在运行,processRecurringInvoices则不会再次创建作业?有点像独特的工作,还是互相排斥?根据解析服务器迁移指南,我们可以使用Kue和Kue-UI之类的东西来模拟parse.com预定作业功能.
我没有实现Kue或Kue-ui,但是看一下这些指南,它看起来并不像现有的parse.com预定作业那样提供接近相同级别的功能.这个观察是否正确?有人实施了吗?是不是必须通过jue中的Kue安排工作,而Kue-ui只提供工作当前状态的摘要,并且不能通过Kue-ui添加新的时间表?
有没有人试图用Jenkins这样的结果取得同样的结果?所以这就是我的想法:
我可以看到以下好处:
当前parse.com调度作业/云作业唯一可以做到的就是基于jenkins的解决方案无法从下拉列表中选择作业名称来创建新计划.
我错过了什么吗?其他人怎么样呢?谢谢.
我有一个导出函数,它读取整个数据库并创建一个包含所有记录的.xls文件.然后将文件发送到客户端.
当然,导出完整数据库的时间需要很多时间,并且请求很快就会以超时错误结束.
处理这种情况的最佳解决方案是什么?
我听说过一些关于使用Redis建立队列的事情,但这需要两个请求:一个用于启动将生成文件的作业,另一个用于下载生成的文件.
这是否可以通过客户的单一请求进行?
我的应用程序利用Kue对请求进行排队,worker.js因为我需要通过Proximo发送作业发出的请求 - 这有点令人困惑.但正因为如此,作业的结果无法发送回用户.以前工作会res.send(results)然后用户会有数据.
让Kue'ed工作将结果发回给用户的最佳方法是什么?我现在能想到的唯一方法是使用Web钩子,但这不是最有效的方法,它在用户和数据之间建立了一道墙.
我最近为node.js使用了一个名为Kue的漂亮库.
我想更好地理解发生了什么,所以我开始阅读代码......
我偶然发现了一段代码,我的脑海里出现了"WTF !!?!@ $ @!$"......
这是代码:
function get(obj) {
var pending = 0
, res = {}
, callback
, done;
return function _(arg){
switch (typeof arg) {
case 'function':
callback = arg;
break;
case 'string':
++pending;
obj[arg](function(err, val){
if (done) return;
if (err) return done = true, callback(err);
res[arg] = val;
--pending || callback(null, res);
});
break;
}
return _;
};
}
Run Code Online (Sandbox Code Playgroud)
正如此使用:
exports.stats = function(req, res){
get(queue)
('inactiveCount')
('completeCount')
('activeCount')
('failedCount')
('delayedCount')
('workTime')
(function(err, obj){ …Run Code Online (Sandbox Code Playgroud) kue ×7
node.js ×6
jobs ×2
redis ×2
worker ×2
heroku ×1
javascript ×1
job-queue ×1
mongodb ×1
parse-server ×1
queue ×1
task-queue ×1