nodejs 有哪些好的消息队列选项?[关闭]

What are good message queue options for nodejs? [closed]

提问人:Bjorn 提问时间:1/16/2011 最后编辑:Johann Philipp StrathausenBjorn 更新时间:6/8/2018 访问量:118126

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

7年前关闭。

希望在我正在使用 node.js 构建的小型 Web 应用程序中使用消息队列。我看了看resque,但不确定这是否合适。目标是使用 socketio 根据后端和其他客户端操作将通知推送到客户端。我可以只用socketio来做到这一点,但我认为也许一个适当的消息队列会让它更干净,而且我不必重新发明轮子。

有哪些选择?

节点.js 消息队列

评论

2赞 TK-421 1/16/2011
不确定,但这似乎是节点自己做得很好的事情!
0赞 TK-421 1/16/2011
您可能已经意识到这一点,但“模块”页面上列出了一个:github.com/ry/node/wiki/modules#message-queue 。我想总是要考虑你自己的开发时间的成本。
5赞 Louis Chatriot 12/14/2012
@TK-421 和 Bjorn Tipling 这确实是节点可以自己做的事情,只要你只有一个节点进程。如果应用程序的不同部分(即 Web 服务器、身份验证提供商、通知中心等)具有不同的进程,则需要 Redis 等外部解决方案。当然,您也可以与非节点进程连接。
1赞 ipaul 3/19/2014
使用 Node AMQ 和 Rabbit MQ (Producer) gist.github.com/DarcInc/9641557 和 (Consumer) gist.github.com/DarcInc/9641582 的示例
1赞 Marinos An 10/31/2019
如果您需要内存中队列,可以考虑使用基于 rxjs 的解决方案

答:

57赞 Alfred 1/16/2011 #1

您可以将 Redis 与闪电般快速的 node_redis 客户端一起使用。它甚至具有内置的 pubsub 语义。

评论

8赞 Exinferis 1/19/2015
我建议在 redis 之上使用一个好的排队模块,就像 RSMQ 一样,这似乎很简单。npmjs.com/package/rsmq
0赞 Andrew dh 4/29/2019
如果您只是想要消息传递的力量而没有技术问题,那么您可以尝试 node-ts.github.io/bus
14赞 James Cooper 4/16/2011 #2

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

  • ActiveMQ的
  • 兔子MQ
  • HornetQ

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

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

7赞 Eduardo Raad 5/30/2011 #3

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

评论

7赞 GordyD 10/2/2014
值得注意的是,红隼不再处于积极开发状态。
12赞 Josh Bassett 3/22/2012 #4

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

11赞 RobotEyes 8/23/2012 #5

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

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

zeromq.node:如果你想走非代理路线,这可能值得一看。实现功能需要做更多工作,但更有可能获得更低的延迟和更高的吞吐量。

评论

1赞 dimiguel 6/8/2018
使用 ZeroMQ 时为 +1。经过大量的研究和时间对 beanstalkd、RabbitMQ、BeeQueue、Bull 和 Kue 的修补,ZeroMQ 最终成为我的最佳体验,尤其是对于由工人驱动的轻量级项目。它快如闪电,文档是一流的。它还具有额外的好处,即不会因大量调用而阻塞您的 Redis 服务器。
0赞 Marinos An 10/31/2019
zeromq.node现在维护在这里:zeromq.js
7赞 Pono 6/16/2013 #6

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

评论

33赞 vvo 11/28/2013
除了 kue 维护不好,有几个问题,没有一个测试!
4赞 HyderA 3/9/2014
此外,它是一个作业队列,而不是一个消息队列
0赞 Rahul Kumar 9/1/2018
它有几个问题,不适合生产
2赞 Marinos An 10/31/2019
使用对我来说更直接。我迷失在文档中。bullkue
2赞 Brian McAuliffe 10/23/2013 #7

正如您描述的那样,我将 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();
}
3赞 AndyGrom 5/17/2014 #8

查看 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');
5赞 Smrchy 12/19/2014 #9

你可能想看看

Redis简单消息队列Node.js版

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

评论

1赞 naugtur 6/11/2017
虽然 RSMQ 很好,并且曾经在生产中为我工作过一次,但请注意,它在 Redis 中使用 Lua 脚本,不适用于 Redis 集群/哨兵设置
3赞 Ben 5/28/2015 #10

Azure ServiceBus 怎么样?它支持 nodejs。

9赞 fujifish 6/16/2015 #11

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

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

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

1赞 robtweed 7/29/2016 #12

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