什么是nodejs的好消息队列选项?
寻找在一个小的web应用程序中使用消息队列,我正在与node.js构build。 我看着resque,但不知道这是适当的。 目标是通过使用socketio将通知推送到基于后端和其他客户端操作的客户端。 我可以用socketio做到这一点,但是我想也许一个正确的消息队列会使这个更清洁,我不必重新发明轮子。
那里有什么select?
您可以使用redis快闪node_redis客户端。 它甚至具有内置的pubsub语义。
您可以使用节点STOMP客户端 。 这可以让你整合各种消息队列,包括:
- ActiveMQ的
- 的RabbitMQ
- HornetQ的
我以前没有用过这个库,所以我不能保证它的质量。 但STOMP是一个非常简单的协议,所以我怀疑你可以在必要时将其提交到提交。
另一个select是使用beanstalkd和节点 。 beanstalkd是用C编写的非常快速的“任务队列”,如果你不需要上面列出的代理的function灵活性,这是非常好的。
无耻的插件:我正在Bokeh上工作:构build在ZeroMQ上的一个简单的,可扩展的,快速的任务队列。 它支持可插拔的数据存储以支持持久性任务,目前内存中支持Redis和Riak。 一探究竟。
以下是我可以提出的一些build议:
node-amqp :一个RabbitMQ客户端,我已经成功地与Socket.IO结合使用,来创build实时的多人游戏和聊天应用程序。 似乎足够可靠。
zeromq.node :如果你想走下非代理路线,这可能值得一看。 更多的工作来实现function,但更可能得到更低的延迟和更高的尽pipe。
我build议尝试Kestrel ,它像Beanstalk一样快速简单,但支持扇出队列。 说memcached。 它使用Scala构build,并在Twitter上使用。
kue是唯一需要的消息队列
看看node-busmq–它是一个由redis支持的生产级,高可用性和可扩展的消息总线。
我为我们的全球云编写了这个模块,目前我们在全球多个数据中心的生产环境中部署了这个模块。 它支持命名队列,点对点通信,保证传送和联合。
欲了解更多关于为什么我们创build这个模块的信息,你可以阅读这篇博文: 所有船上的消息总线
你可能想看看
Redis简单消息队列Node.js
其中使用Redis并提供了Amazons SQS的大部分function。
我用你所描述的socketIO使用KUE。 我存储了这个作业的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(); }
看看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');
Azure ServiceBus如何? 它支持nodejs。
你也可能想看看ewd-qoper8: https : //github.com/robtweed/ewd-qoper8