Tag: kue

Node.js Kue自动处理作业,如果队列不为空

我是Kue新手,有一些问题。 希望你能帮我 :) 我读了所有Kue的文档,但是我看到只有一种方式来处理队列中的作业:手动调用处理。 如果队列为空,我需要尽快处理作业,如果队列不为空,则在先前完成后运行rest作业。 有没有办法做到这一点? 谢谢。 或者,如果我重新提出问题:如果具有特定types的职位将从队列中耗尽,将会发生什么? 我应该再次开始处理,还是在新作业出现后自动进行处理? 实际上,由于服务器端限制了请求,我需要适时传播API请求。

kue – 在不同文件中处理作业

我想我的queue.process函数在一个单独的文件,但module.exports不起作用。 kue.js: var kue = require('kue'); module.exports = function() { var queue = kue.createQueue(); queue.process('test', function(job, done) { console.log('job processed.'); done(); } } server.js: require('./kue'); //server stuff 没有错误。 我也有一个单独的function排队工作和它的工作。 这个问题似乎是在导入kue.js文件。

Kue:连续处理/轮询队列的最佳实践

连续处理添加到队列中的项目的最佳方式是什么? 我看到下面的方法 queue.process https://github.com/Automattic/kue#processing-jobs 但是这会处理并返回。 这个通话后添加的项目显然不被处理。 我想这样做: queue.on('job enqueue', function(id, type){ queue.process('email', function (job, done) { console.log('processing one: ' + job.id); done(null); }); }); 但不知道这是否会触发多个进程方法忽略当前的队列状态? 编辑: 我已经创build了一个处理程序来侦听“电子邮件”types,但只有在下面的情况下才会调用它。 除非我错过了一些东西,否则我会期待这个过程在这里运行10次? const queue = kue.createQueue(); queue.process('email', function (job, done) { email(job.id, job.data, done); }); var email = function(id, email, done) { console.log('job: %s, sent to: %s number: %s', […]

有条件的尝试与nodejs Kue

我在一个networking爬虫应用程序中使用kue 。 如果错误符合特定条件,我想设置某些失败作业的attempts 。 例如,如果错误是由套接字挂起引起的,则作业将以1分钟的间隔重试3次。 我的代码如下所示,但不起作用 var kue = require('kue'); var queue = kue.createQueue(); queue.process('grab', function (job, done){ //doCrawlingJob is async call and returns promise doCrawlingJob(job).then(function(result){ done(); }.catch(function(err){ if (err.message.indexOf("socket hang up") >= 0) { job.attempts(3).backoff({delay:60*1000}); job.save(function(){ done(err); }); } else { done(err); } ); }); //… var job = queue.create('grab', data).removeOnComplete(true).save();

你如何使用nodejs&kue创build一个排队的作业,然后自然退出?

使用nodejs和kue,我想插入一个长时间运行的作业到队列中,并忘记它。 工作人员将处理所有细节。 简短的例子: (function(){ var kue = require('kue'); var jobs = kue.createQueue(); var job = jobs.create('email', { foo: "bar" }).save(function(err){ console.log("saved"); jobs.shutdown( function(err){ console.log("shutting down"); },0); }); }()); // DOES NOT EXIT 作业被创build(并单独处理),但生成器进程不会在没有中断信号的情况下退出。 我不希望生产者进程保持资源或连接打开。 我不想听任何事情。 我希望能有一种“消防而忘记”的方法。 kue做这个吗? 怎么样? 谢谢! 编辑: 1:添加:lsof -p显示打开的tcp连接到端口6379(redis服务器) 2:我也尝试在closurescallback中调用job.client.quit()。

kue以“群集”模式多次处理预定作业

我已经设置了kue来运行Cluster模块,该模块为每个CPU核心提供了一个kue的subprocess。 当调度程序插入every键到redis时,一切似乎都是按顺序的 – every运行只有一个键集。 但是,当触发作业处理的时间到来时,所有subprocess(工作者)开始处理处理逻辑,这导致作业具有由单个“调度程序”条目触发的多个实例。 当以编程方式触发kue的新作业时,似乎不会发生此症状,使用kue API时也不会发生这种情况。 请指教。 主引导代码 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { require('./init.js'); for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('online', function (worker) { console.log('Worker ' + worker.process.pid + ' is online'); }); cluster.on('exit', function (worker, code, signal) { console.log('Worker ' + […]

这是我正在使用的正确结构 – (kue,集群,节点)

嗨,我正在与kue , 群集 , redis ,node.js。 这里是一个非常简单的例子,稍后我会从外面调用testing函数。 我的目的是将一些传入作业添加到队列中并使用工作人员进行处理。 在我的情况下,当一个用户使用我的应用程序完成一个订单,他会收到一封电子邮件。 我会把电子邮件的详细信息发送到队列并使用工作人员进行处理。 var cluster = require('cluster'); var kue = require('kue'); var jobs = kue.createQueue(); var max_workers = 3; function test() { jobs.create('email', { title: 'welcome email for tj' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err){} console.log( "no error"); }); if( cluster.isMaster ) { for […]

docker-compose安装程序不允许容器连接到redis

所以我写了一个节点应用程序,我的docker-compose.yml如下所示: version: '2' services: redis: image: "redis:latest" web: build: . ports: – "3000:3000" volumes: – .:/app links: – redis emailworker: build: . env_file: – ./.env command: node ./lib/workers/email.js volumes: – .:/app links: – redis smsworker: build: . env_file: – ./.env command: node ./lib/workers/sms.js volumes: – .:/app links: – redis 很简单,一个networking服务器,和两个工人来处理电子邮件和短信工作。 一切都很好,直到今天下午,什么都没有改变,但我的应用程序启动时,我不能再连接到redis容器。 我运行docker-compose up并在尝试使用kue节点模块连接到redis时出现以下错误: Error: Redis […]

节点Kue和subprocess – 从产生的进程中获取错误

我尝试通过Kue的作业队列产生一个执行cpu密集计算的subprocess。 我的代码目前看起来像这样: consumer.js var kue = require('kue'); var util = require('util'); var spawn = require('child_process').spawn; var jobs = kue.createQueue(); jobs.process('calc', 2, function(job, done){ var work = spawn('Rscript', ['opti2.R', job.data.file]); work.stderr.on('data', function (data) { job.log('stderr: ' + data); }); work.stdout.on('data', function (data) { job.log('stdout: ' + data); }); work.on('exit', function (code, signal) { console.log('child process exited […]

在kue创build后可以改变一个工作的优先级?

这个要求很简单,在kue创build一个具有优先级的工作之后,是否有可能在计划运行之前改变其优先级(像POSIX中的renice )?