提问人:Bjorn 提问时间:1/16/2011 最后编辑:Johann Philipp StrathausenBjorn 更新时间:6/8/2018 访问量:118126
nodejs 有哪些好的消息队列选项?[关闭]
What are good message queue options for nodejs? [closed]
问:
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
7年前关闭。
希望在我正在使用 node.js 构建的小型 Web 应用程序中使用消息队列。我看了看resque,但不确定这是否合适。目标是使用 socketio 根据后端和其他客户端操作将通知推送到客户端。我可以只用socketio来做到这一点,但我认为也许一个适当的消息队列会让它更干净,而且我不必重新发明轮子。
有哪些选择?
答:
您可以将 Redis 与闪电般快速的 node_redis 客户端一起使用。它甚至具有内置的 pubsub 语义。
评论
您可以使用节点 STOMP 客户机。这将允许您与各种消息队列集成,包括:
- ActiveMQ的
- 兔子MQ
- HornetQ
我以前没有使用过这个库,所以我不能保证它的质量。但是 STOMP 是一个非常简单的协议,所以我怀疑你可以在必要时将其破解为提交。
另一种选择是将 beanstalkd 与 node 一起使用。beanstalkd 是一个非常快速的“任务队列”,用 C 语言编写,如果您不需要上面列出的代理的功能灵活性,它非常好。
我建议尝试 Kestrel,它像 Beanstalk 一样快速简单,但支持扇出队列。说 memcached。它是使用 Scala 构建的,并在 Twitter 上使用。
评论
无耻插件:我正在研究 Bokeh:一个基于 ZeroMQ 构建的简单、可扩展且速度极快的任务队列。它支持用于持久化任务的可插拔数据存储,目前支持内存中,支持 Redis 和 Riak。一探究竟。
以下是我可以提出的一些建议:
node-amqp:一个 RabbitMQ 客户端,我成功地将它与 Socket.IO 结合使用,制作了一个实时多人游戏和聊天应用程序等。似乎足够可靠。
zeromq.node:如果你想走非代理路线,这可能值得一看。实现功能需要做更多工作,但更有可能获得更低的延迟和更高的吞吐量。
评论
Kue 是您唯一需要的消息队列
评论
bull
kue
正如您描述的那样,我将 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(); }
查看 node-queue-lib。也许你就足够了。 它支持节点.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');
你可能想看看
它使用 Redis 并提供 Amazons SQS 的大多数功能。
评论
Azure ServiceBus 怎么样?它支持 nodejs。
看看 node-busmq - 它是一个由 redis 支持的生产级、高可用性和可扩展的消息总线。
我为我们的全球云编写了这个模块,它目前部署在全球多个数据中心的生产环境中。它支持命名队列、点对点通信、保证交付和联合。
有关我们创建此模块的原因的更多信息,您可以阅读这篇博文:All Aboard The Message Bus
您可能还想查看 ewd-qoper8: https://github.com/robtweed/ewd-qoper8
评论