希望在我正在使用node.js构建的小型Web应用程序中使用消息队列。我看了resque,但不确定是否合适。目标是基于套接字和后端的其他客户端操作将通知推送到客户端。我可以只用socketio来做到这一点,但我认为也许适当的消息队列可以使这个清理器更干净,而我不必重新发明轮子。
有哪些选择?
希望在我正在使用node.js构建的小型Web应用程序中使用消息队列。我看了resque,但不确定是否合适。目标是基于套接字和后端的其他客户端操作将通知推送到客户端。我可以只用socketio来做到这一点,但我认为也许适当的消息队列可以使这个清理器更干净,而我不必重新发明轮子。
有哪些选择?
Answers:
您可以将redis与快速的node_redis客户端一起使用。它甚至具有内置的pubsub语义。
您可以使用节点STOMP客户端。这将使您与各种消息队列集成,包括:
我以前没有使用过该库,因此无法保证其质量。但是STOMP是一个非常简单的协议,因此我怀疑您可以在必要时将其黑客提交。
另一种选择是将beantalkd与node一起使用。beanstalkd是一个用C语言编写的非常快速的“任务队列”,如果您不需要上面列出的代理的功能灵活性,则非常好。
无耻的插件:我正在研究Bokeh:建立在ZeroMQ 上的简单,可伸缩和快速的任务队列。它支持用于持久任务的可插拔数据存储,目前支持内存,Redis和Riak。看看这个。
我可以提出一些建议:
node-amqp:我已经成功地与Socket.IO结合使用的RabbitMQ客户端,用于制作实时多人游戏和聊天应用程序。似乎足够可靠。
zeromq.node:如果您想沿着非经纪路线走下去,这可能值得一看。实现功能需要做更多的工作,但是您更有可能获得更低的延迟和更高的吞吐量。
看看node-busmq这是一种生产级,高度可用且具有可伸缩性的消息总线,由redis支持。
我为我们的全球云编写了该模块,目前已在全球多个数据中心的生产环境中部署了该模块。它支持命名队列,对等通信,保证的传递和联合。
有关为什么我们创建此模块的更多信息,您可以阅读以下博客文章:消息总线上的所有内容
kue是您唯一需要的消息队列
bull
对我来说更简单。随着kue
我迷失在文档中。
我建议尝试使用Kestrel,它像Beanstalk一样快速简便,但支持扇出队列。讲memcached。它使用Scala构建,并在Twitter上使用。
看一下node-queue-lib。也许您就足够了。它支持node.js和浏览器。有两种传送策略:广播和循环传送。只有JavaScript。
快速示例:
var Queue = require('node-queue-lib/queue.core');
var queue = new Queue('Queue name', 'broadcast');
// subscribe on 'Queue name' messages
queue.subscribe(function (err, subscriber) {
subscriber.on('error', function(err){
//
});
subscriber.on('data', function (data, accept) {
console.log(data);
accept(); // accept process message
});
});
// publish message
queue.publish('test');
我像您描述的那样将KUE与socketIO一起使用。我将socketID与作业一起存储,然后可以在作业完成中检索它。.KUE基于redis,并在github上有很好的示例
像这样...
jobs.process('YourQueuedJob',10, function(job, done){ doTheJob(job, done); }); function doTheJob(job, done){ var socket = io.sockets.sockets[job.data.socketId]; try { socket.emit('news', { status : 'completed' , task : job.data.task }); } catch(err){ io.sockets.emit('news', { status : 'fail' , task : job.data.task , socketId: job.data.socketId}); } job.complete(); }
您可能还想查看ewd-qoper8:https : //github.com/robtweed/ewd-qoper8