对于 nodejs,什么是好的消息队列选项?

希望在我用 node.js 构建的一个小型 Web 应用程序中使用消息队列。我看着雷克斯,但不确定这是否合适。目标是基于后端和其他客户端操作使用 socketio 将通知推送到客户端。我可以只使用 socketio 来完成这项工作,但是我认为一个合适的消息队列可能会使这项工作更加干净,而且我也不必重新发明轮子。

What are the options out there?

114992 次浏览

你可以在快如闪电的 node_redis客户端上使用 雷迪斯,它甚至有内置的 Pubsub语义。

You could use the node STOMP 客户端. This would let you integrate with a variety of message queues including:

  • ActiveMQ
  • RabbitMQ
  • 大黄蜂 Q

我以前没有用过这个图书馆,所以我不能保证它的质量。但是 STOMP 是一个非常简单的协议,所以我怀疑你可以在必要的时候黑进去。

另一种选择是使用 带节点的豆茎。Beanstalkd 是用 C 编写的一个非常快的“任务队列”,如果您不需要上面列出的代理的特性灵活性,那么它非常好。

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

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

以下是我的一些建议:

Node-amqp : 一个 RabbitMQ 客户端,我已经成功地将它与 Socket.IO 结合使用,制作了一个实时多人游戏和聊天应用程序。看起来很可靠。

Node : 如果您希望沿着非中介的路线前进,那么可能值得一看。实现功能需要更多的工作,但是更有可能获得更低的延迟和更高的吞吐量。

kue is the only message queue you would ever need

我使用 KUE 和 socketIO,就像你描述的那样。 我将 socketID 与作业一起存储,然后可以在作业完成中检索它。 KUE is based on redis and has 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();
}

看看 Node-queue-lib。也许这就足够了。 它支持 node.js 和浏览器。 只有 javascript。

Quick example:

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

你可能想看看

用于 Node.js 的 Redis 简单消息队列

它使用 Redis 并提供了 AmazonSQS 的大部分特性。

Azure 服务总线怎么样? 它支持 nodejs。

看看 Node-busmq-它是一个生产级别的、高可用性和可扩展的消息总线,由 redis 支持。

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

For more information on why we created this module you can read this blog post: 消息总线上的所有人

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