nodejs有什么好的消息队列选项?

时间:2011-01-15 17:10:23

标签: node.js message-queue

希望在我使用node.js构建的小型Web应用程序中使用消息队列。我看了resque但不确定是否合适。目标是通过socketio基于后端和其他客户端操作将通知推送到客户端。我可以用socketio做到这一点,但我认为可能一个正确的消息队列会使这个更清洁,我不必重新发明轮子。

有哪些选择?

12 个答案:

答案 0 :(得分:47)

您可以将redis与快速node_redis客户端一起使用。它甚至内置pubsub语义。

答案 1 :(得分:12)

您可以使用节点STOMP client。这将允许您与各种消息队列集成,包括:

  • 的ActiveMQ
  • 的RabbitMQ
  • HornetQ的

我之前没有使用过这个库,所以我不能保证它的质量。但STOMP是一个非常简单的协议,所以我怀疑你可以在必要时将其破解为提交。

另一种选择是使用beanstalkd with node。 beanstalkd是一个用C编写的非常快速的“任务队列”,如果你不需要上面列出的代理的功能灵活性,这是非常好的。

答案 2 :(得分:10)

无耻的插件:我正在研究Bokeh:一个基于ZeroMQ构建的简单,可扩展且超快的任务队列。它支持用于持久化任务的可插拔数据存储,目前在内存中,支持Redis和Riak。看看吧。

答案 3 :(得分:9)

以下是我可以提出的一些建议:

node-amqp:我已成功与Socket.IO结合使用的RabbitMQ客户端,可以制作实时多人游戏和聊天应用程序等。似乎足够可靠。

zeromq.node:如果你想沿着非经纪路线走下去,这可能值得一看。更多工作来实现功能,但您更有可能获得更低的延迟和更高的吞吐量。

答案 4 :(得分:8)

查看node-busmq - 它是由redis支持的生产级,高可用性和可扩展的消息总线。

我为我们的全球云编写了这个模块,它目前在我们的生产环境中部署在世界各地的几个数据中心。它支持命名队列,点对点通信,保证传递和联合。

有关我们创建此模块的原因的更多信息,请阅读此博文:All Aboard The Message Bus

答案 5 :(得分:6)

kue是您唯一需要的消息队列

答案 6 :(得分:5)

我建议尝试Kestrel,它像Beanstalk一样快速而简单但支持扇出队列。讲memcached。它是使用Scala构建的,并在Twitter上使用。

答案 7 :(得分:3)

您可能需要查看

Redis Simple Message Queue for Node.js

使用Redis并提供Amazons SQS的大多数功能。

答案 8 :(得分:1)

我和你描述的socketIO一样使用了KUE。 我将socketID与作业一起存储,然后可以在作业完成中检索它。 KUE基于redis并且good examples on 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();
}

答案 9 :(得分:1)

看看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');

答案 10 :(得分:1)

Azure ServiceBus怎么样?它支持nodejs。

答案 11 :(得分:0)

您可能还想查看ewd-qoper8:https://github.com/robtweed/ewd-qoper8