Tag: 队列

Node.js(ES6) – 用Promise.all保证控制stream

我正在尝试创build一个处理并行HTTP请求的队列。 为每个HTTP请求生成一个请求对象,例如 { method: 'POST', uri: 'http://posttestserver.com/post.php', body: { some: 'foo' }, json: true } 我传入这些对象的数组,并希望将它们添加到队列中,然后执行实际的请求。 问题 :Promise.all语句在返回之前等待所有请求完成。 问题 :我希望将所有任务添加到队列中,并在每个请求完成后返回 ,而不是等待它们全部。 任何人都可以build议如何分开逻辑,使请求从任务添加到队列? 注意:promise-queue和request-promise都返回promise。 这是我有: "use strict"; const Queue = require("promise-queue"); const rp = require('request-promise'); const maxConcurrent = 10; const maxQueue = Infinity; const queue = new Queue(maxConcurrent, maxQueue); var options = [ { method: 'POST', […]

队列与非阻塞I / O

所以,我们正在devise一个新的微服务架构。 内部沟通是最大的挑战之一。 对于需要响应的通信,我们使用REST API。 但对于只想传递信息的服务,这个API处理是不必要的开销。 一种方法是使用队列。 service1将信息推入队列,service2可以从那里消耗。 因此,service1不必等待(不像API调用)。 (如果在处理信息时有任何错误,service2可以通过callbackURL通知service1,或者以其他方式通知;这点不是问题[1]) 现在有了Queue,有两个选项,一个是RabbitMQ 。 另一个是AWS SQS 。 有了RabbitMQ,我不得不担心服务器设置和一切(可以完成,但是要避免它)。 所以在SQS的POC之后,这似乎是一个不错的select,但SQS在内部使用Rest API与AWS服务器进行通信,在这两个时间点(service1在推送时,service2在消费时)都会有开销。 所以现在我想为什么不在NodeJS中做,service1将打到service2的信息。 Service2将立即作出回应,确认它已收到信息,如果有任何错误[1]。 现在我可以总结的优点/缺点是 – 的RabbitMQ 易于实施 如果接收方不可用,发送方不必担心重试。 服务器设置成本+维护(+调整) SQS 最容易实施 价钱 对消息进行持续轮询 在推/收上的开销 非阻塞API 没有第三个媒体需要沟通 Service1必须pipe理重试机制 相对于SQS,更less的开销 信息将在内存中处理 所以到了某种程度,我的问题是,使用非阻塞API是否是个好主意? 或者在制度可扩展性方面哪一个更好。 编辑 – 像PubNub或Pusher的PubSub提供程序可以用来代替队列吗?

具有工作队列devise模式的API

我正在build立一个连接到工作队列的API,并且在结构上遇到了麻烦。 我正在寻找的是一个通过API接口的工作队列的devise模式。 细节: 我正在使用Node.js服务器和Express来创build一个接受请求并返回JSON的API。 这些请求可能需要很长时间才能处理(数据密集型),所以这就是我们使用排队系统(RabbitMQ)的原因。 因此,例如让我说,我发送一个请求到API将需要15分钟处理。 Express API格式化请求并将其放入RabbitMQ(AMQP)队列中。 下一个可用的工作人员将请求从队列中取出并开始处理。 完成后(在这种情况下15分钟)它将数据保存到MongoDB中。 …. 怎么办 ….. 我的问题是,如何将完成的数据返回给API的调用者? 调用者是一个完全独立的程序,通过类似于Ajax请求的方式与API联系。 工作人员将处理的数据保存到数据库中,但我无法推回到原来的调用程序。 有没有人有任何API的工作队列资源? 谢谢,麻烦您了。

如何在NodeJS中创build和pipe理工作进程?

例如,假设用户请求处理一些audio文件,那么nodejs当然不能进行紧张的处理,所以它应该将其卸载到工作进程中。 这些工作人员可能需要能够发布/订阅事件,在死亡时重新生成,队列应该能够负载均衡,维护caching并保持活跃状态​​。 我已经看到了0MQ,其他人喜欢它,但我不知道如何将它集成到一个Web应用程序… 什么是创build和pipe理这些工作stream程的行业标准方法? 什么是使用的工具? 编辑:还有一件事:说audio处理需要很长时间,请求超时。 除了增加超时外,还有什么办法可以解决吗? 编辑2:由工人,我的意思是像Heroku工人dynos – 他们如何工作?

NodeJS推送队列,由Laravel工作人员使用

我试图消费节点应用程序发送给SQS的消息。 因此,“推”操作由服务器A上的节点应用执行,服务器B上的Laravel App的“监听”操作。 我的问题:我不知道如何格式化php artisan queue:work消耗的有效载荷php artisan queue:work 。 有没有人经历过这个,find了解决办法? 谢谢!

node.js中的作业队列

我正在寻找一个可以被php调用的node.js中的作业队列pipe理器。 这是一个Web应用程序,需要发送电子邮件,创buildPDF文件等,我想进行asynchronous的PHP进程。 过程示例: 用户请求一个php页面 Php调用作业队列pipe理器并添加一个任务 任务是在node.js中asynchronous执行的php,最好是稍微安静些 任务是执行一个PHP脚本 为什么这个“复杂”的系统? 我们用PHP(Zend Framework)编写我们所有的Web应用程序, 我们想开始学习node.js 我们需要一个asynchronous过程(快速响应!) “真正”的任务应该是一个PHP脚本,以利用已经写好的PHP类,以方便地访问数据库连接,尽可能多的DRY 这个系统的用例: 用户自行注册,系统会发送欢迎邮件 用户完成电子商务订单,系统将发送发票 最后,我们还想使用node-cron来执行非系统范围的cron任务(非常特定于应用程序)。 Node-cron将调用作业队列pipe理器,后者将运行一个php脚本。 节点中是否有这样的应用程序?

asynchronous队列永远不会随机触发

你好,StackOverflow社区, 我正在继续玩nodejs。 所以下面是我的launch.js应用程序的简要总结 var counter = 0; var queue = async.queue(function(objectWithVariousProperties, callback) { methodDoingVariousAsynchronousStuff(objectWithVariousProperties.link, function(err,result) counter++; callback(); }); }, 20); queue.drain = function() { log.debug("Finished Queue", { "Objects processed" : counter }); }; //TO various iterations over several array and construct some object and then push them in the queue via queue.push(media_object) 我的问题是,80%的过程工作的时间。 应用程序通过shell命令nodejs launch.js启动,处理队列,当队列结束时显示'Finished […]

如何限制(或排队)调用Node.JS中的外部进程?

脚本 我有一个Node.JS服务(使用ExpressJS编写),通过DnD( 示例 )接受图像上传。 上传图片后,我会做一些事情: 从中拉EXIF数据 调整它的大小 这些调用目前正在通过node-imagemagick模块进行处理,我的代码如下所示: app.post('/upload', function(req, res){ … <stuff here> …. im.readMetadata('./upload/image.jpg', function(err, meta) { // handle EXIF data. }); im.resize(…, function(err, stdout, stderr) { // handle resize. }); }); 题 正如你们中的一些人已经发现的那样,问题是如果我有足够的同时上传,那么每一个上传的将会产生一个“身份”调用,然后resize操作(Image Magick),在高负载下有效地杀死服务器。 只要用ab -c 100 -n 100进行testing就可以locking我的小型512 Linode dev服务器,这样我就可以强制重启。 我知道我的testing对服务器来说可能只是太多的负载,但是我想要一个更稳健的方法来处理这些请求,所以我有一个更优雅的失败,那就是虚拟机自杀。 在Java中,我通过创build一个固定线程的ExecutorService来解决这个问题 ,该工作排队工作并在最多X个线程上执行它。 在Node.JS中,我甚至不知道从哪里开始解决这样的问题。 我没有把自己的大脑包装在非线程本质中,以及如何创buildasynchronousJavaScript函数来排队工作,而另一个…(线程?)处理队列。 任何关于如何思考这个或如何处理这个问题的指针将不胜感激。 附录 这与FFMpeg的这个问题不一样,尽pipe我认为一旦他的web应用程序处于加载状态,那么他就会有同样的问题,因为它归结为相同的问题(同时引发太多的并行本地进程)。

是否有可能在kue节点js中更新已经创build的作业

嗨,我正在使用Kue创造就业机会。 jobs.create('myQueue', { 'title':'test', 'job_id': id ,'params': params } ) .delay(milliseconds) .removeOnComplete( true ) .save(function(err) { if (err) { console.log( 'jobs.create.err', err ); } }); 每个工作都有一个延迟时间,通常是3个小时。 现在我将检查每个传入的请求,要创build一个新的工作,并获得ID。 正如你从上面的代码可以看到,当我创build工作,我将添加作业ID作业。 所以现在我想检查传入的ID与队列中的现有作业的job_id s和更新现有的作业与新PARAMMS如果find一个匹配的ID。 所以我的工作队列将有唯一的job_id每次:)。 可能吗 ? ,我search了很多,但没有find帮助,我检查了kue json API 。 但它只能创build并获取检索作业,不能更新现有的logging。 提前致谢 。

Node.js / Express和并行队列

我们正在构build一个基于Node.js服务器和Express的基础架构。 在服务器中,发生的情况如下: 服务器接受来自客户端的传入HTTP请求。 服务器生成两个文件(这个操作可以是“相对较长”,也就是说0.1秒左右) 服务器将生成的文件(每个〜20-200 KB)上传到外部CDN 服务器响应客户端,这包括CDN上文件的URI 目前,服务器为每个请求按顺序执行此操作,而且这种方式运行良好(Node / Express可以自动处理并发请求)。 然而,随着我们计划增长,并发请求的数量可能会增长,我们相信对我们来说,实现一个处理请求的队列会更好。 否则,我们可能冒险有太多的任务在同一时间运行和太多的打开连接到CDN。 快速响应客户并不是一件相关的事情。 我在想的是在Node服务器中有一个单独的部分,它包含一些 “工作人员”(2-3,但我们将做testing以确定同时操作的正确数量)。 所以,新stream程看起来像这样: 在接受来自客户端的请求之后,服务器将一个操作添加到队列中。 有2-3(待testing)工作人员将队列排除在外并执行所有操作(生成文件并将其上载到CDN)。 当工作人员处理了这个操作(不pipe是否在队列中停留时间较长),它通知Node服务器(callback),并且服务器响应客户端(它一直在等待)。 你怎么看待这个方法? 你相信这是正确的吗? 最重要的是,这可以在Node / Express中实现吗? 感谢您的时间