【问题标题】:What are good message queue options for nodejs? [closed]nodejs 有哪些好的消息队列选项? [关闭]
【发布时间】:2011-06-09 17:06:16
【问题描述】:

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

有哪些选择?

【问题讨论】:

  • 不确定,但这似乎节点本身会做得很好!
  • 您可能已经意识到这一点,但模块页面上列出了一个:github.com/ry/node/wiki/modules#message-queue。我想总要考虑您自己的开发时间成本。
  • @TK-421 和 Bjorn Tipling 这确实是节点可以自己做的事情,只要你只有一个节点进程。如果您的应用程序的不同部分(即网络服务器、身份验证提供程序、通知中心等)有不同的进程,则需要诸如 Redis 之类的外部解决方案。当然,您也可以连接非节点进程。
  • 使用 Node AMQ 和 Rabbit MQ 的示例(生产者)gist.github.com/DarcInc/9641557 和(消费者)gist.github.com/DarcInc/9641582
  • 如果你需要一个内存队列,你可以考虑这个rxjs-based solution

标签: node.js message-queue


【解决方案1】:

我可以提出以下几点建议:

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

zeromq.node:如果你想走非中介路线,这可能值得一看。实现功能的工作量更大,但您更有可能获得更低的延迟和更高的吞吐量。

【讨论】:

  • +1 关于使用 ZeroMQ。经过大量研究和花时间修补 beanstalkd、RabbitMQ、BeeQueue、Bull 和 Kue,ZeroMQ 最终成为了我的最佳体验,尤其是对于由工作人员提供支持的轻量级项目。它快如闪电,文档是一流的。它还有一个额外的好处,那就是不会因大量调用而阻塞 Redis 服务器。
  • zeromq.node 现在在这里维护:zeromq.js
【解决方案2】:

我像你描述的那样使用了带有 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();
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        Azure ServiceBus 怎么样?它支持nodejs。

        【讨论】:

          【解决方案6】:

          你可能想看看

          Redis Simple Message Queue for Node.js

          使用 Redis 并提供亚马逊 SQS 的大部分功能。

          【讨论】:

          • 虽然 RSMQ 很好,并且曾经在生产环境中为我工作过,但请注意它在 Redis 中使用 Lua 脚本,并且不适用于 Redis 集群/哨兵设置
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

            • 除了 kue 没有得到很好的维护,有几个问题,没有一个测试!
            • 另外,它是一个作业队列 - 不是消息队列
            • 它有几个问题,不适合生产
            • 使用bull 对我来说更直接。使用kue,我迷失在文档中。
            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

              • 值得注意的是,Kestrel 不再处于积极开发阶段。
              【解决方案11】:

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

              • ActiveMQ
              • RabbitMQ
              • HornetQ

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

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

              【讨论】:

                【解决方案12】:

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

                【讨论】:

                • 我建议在redis之上使用一个好的队列模块,就像RSMQ一样,看起来很简单。 npmjs.com/package/rsmq
                • 如果您只想要消息传递的强大功能而没有技术问题,那么您可以尝试node-ts.github.io/bus
                猜你喜欢
                • 2018-07-06
                • 2011-01-28
                • 1970-01-01
                • 2010-11-23
                • 1970-01-01
                • 1970-01-01
                • 2017-11-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多