ActiveMQ或RabbitMQ或ZeroMQ或

Abi*_*bie 646 activemq-classic jms message-queue rabbitmq zeromq

我们有兴趣听听ActiveMQ与RabbitMQ和ZeroMQ的优缺点.还欢迎有关任何其他有趣的消息队列的信息.

Jul*_*ien 342

编辑:我的初步答案非常关注AMQP.我决定重写它以提供关于该主题的更广泛的观点.

这3种消息传递技术在构建分布式系统时有不同的方法

RabbitMQ是AMQP协议的领先实现之一(以及Apache Qpid).因此,它实现了代理体系结构,这意味着消息在发送到客户端之前在中心节点上排队.这种方法使RabbitMQ非常易于使用和部署,因为只需几行代码就可以支持路由,负载平衡或持久消息队列等高级方案.但是,它也使其可扩展性降低,"慢",因为中央节点增加了延迟并且消息包络非常大.

ZeroMq是一个非常轻量级的消息系统,专为高吞吐量/低延迟场景而设计,例如您可以在金融领域找到的场景.Zmq支持许多高级消息传递方案,但与RabbitMQ相反,您必须通过组合框架的各个部分(例如:套接字和设备)来自己实现大部分消息.Zmq非常灵活,但你必须学习80页左右的指南(我推荐阅读任何编写分布式系统的人,即使你不使用Zmq),然后才能做更复杂的事情而不是发送消息两个同伴之间.

ActiveMQ处于中间地带.与Zmq一样,它可以与代理和P2P拓扑一起部署.与RabbitMQ一样,实现高级方案更容易,但通常以原始性能为代价.这是消息传递的瑞士军刀:-).

最后,所有3个产品:

  • 有最常用语言的客户端api(C++,Java,.Net,Python,Php,Ruby,...)
  • 有很强的文档
  • 积极支持

  • 虽然如此,我不确定采用AMQP是否与原始问题有很强的相关性.我认为,对于一个消息队列的选择,有一些比它使用的底层有线协议更重要的考虑因素. (22认同)
  • 在RabbitMQ和ActiveMQ工作后,我建议你远离ActiveMQ.这些版本非常多,而且机器故障和内存泄漏等问题也没有结束......另一方面,RabbitMQ正常工作.插入电源后,我再也不用看了.它只是做它需要的东西.如果你愿意,我可以在我的博客上找到一个简单的RabbitMQ教程http://www.jarloo.com/rabbitmq-c-tutorial/ (19认同)
  • 问题没有提到要求AMQP,但这个答案主要集中在AMQP上.如果我们假设JMS是一个要求,那么答案基本上是相反的:ActiveMQ是最受欢迎的,RabbitMQ有一些应该可行的支持.如果没有假设有线协议:请参阅其他答案. (8认同)
  • 在查看RabbitMQ与ActiveMQ的职位之后,RabbitMQ似乎需求更大.ActiveMQ已经存在了很长时间,但雇主几乎同样要求它. (2认同)

And*_*ich 174

为什么你会想念Sparrow,Starling,Kestrel,Amazon SQS,Beanstalkd,Kafka,IronMQ

消息队列服务器

消息队列服务器有各种语言,Erlang(RabbitMQ),C(beanstalkd),Ruby(Starling或Sparrow),Scala(Kestrel,Kafka)或Java(ActiveMQ).可以在这里找到简短的概述

麻雀

  • 由Alex MacCaw撰写
  • Sparrow是一个用Ruby编写的轻量级队列"讲memcache"

欧椋鸟

红隼

  • 由罗比指针编写
  • 用Scala编写的Starling克隆(Starling从Ruby到Sc​​ala的端口)
  • 队列存储在内存中,但记录在磁盘上

的RabbitMQ

  • RabbitMQ是Erlang中的Message Queue Server
  • 将作业存储在内存中(消息队列)

Apache ActiveMQ

  • ActiveMQ是Java中的一个开源消息代理

Beanstalkd

亚马逊SQS

卡夫卡

  • 写在Scala的LinkedIn
  • LinkedIn使用它来卸载所有页面和其他视图的处理
  • 默认使用持久性,将OS磁盘高速缓存用于热数据(具有更高的吞吐量,然后启用持久性的上述任何一个)
  • 支持在线作为离线处理

ZMQ

  • 充当并发框架的套接字库
  • 比TCP更快,适用于集群产品和超级计算
  • 通过inproc,IPC,TCP和多播传递消息
  • 通过扇出,pubsub,管道,请求 - 回复连接N对N.
  • 用于可扩展多核消息传递应用程序的Asynch I/O.

EagleMQ

  • EagleMQ是一个开源,高性能和轻量级的队列管理器.
  • 用C写的
  • 将所有数据存储在内存中并支持持久性.
  • 它有自己的协议.支持使用队列,路线和频道.

IronMQ

  • IronMQ
  • 写在Go
  • 完全托管的队列服务
  • 可用作云版本和内部部署

我希望这对我们有所帮助. 资源


Fly*_*wat 83

比您想要了解的更多信息:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes


UPDATE

只是详细说明保罗在评论中添加的内容.上面提到页面在2010年之后已经死了,所以请阅读一小撮盐.很多东西已经在3年内改变了.

Wiki页面的历史

  • 我认为这些人正在考虑队列错误 - 队列不应该是每个用户1(或更多).他们应该将他们的工作放在_few_队列然后利用.每个用户的_inboxes_(或mboxes). (7认同)

san*_*ole 71

这真的取决于你的用例.

将0MQ与ActiveMQ或RabbitMQ进行比较是不公平的.ActiveMQ和RabbitMQ是需要安装和管理的消息系统.它们提供的功能比ZeroMQ要多得多.他们有真正的持久性队列,支持交易等.

ZeroMQ是一个轻量级的面向消息的套接字实现.它也适用于进程内异步编程.可以在ZeroMQ上运行"企业消息系统",但您必须自己实施很多.

所以:

ActiveMQ,RabbitMQ,Websphere MQ和MSMQ是"企业消息队列"

ZeroMQ是面向消息的IPC库.

  • 您可以使用多个.http://www.rabbitmq.com/blog/2010/10/18/rabbitmq0mq-bridge/讨论如何使用0MQ桥接几个RabbitMQ代理并创建松散耦合的联合. (7认同)

Rob*_*ies 34

还有的RabbitMQ和ActiveMQ的之间的比较在这里.开箱即用,ActiveMQ配置为保证消息传递 - 与不太可靠的消息传递系统相比,这会给人留下缓慢的印象.如果您愿意,您可以随时更改性能配置,并获得至少与其他任何邮件系统一样的性能.至少你有这个选择.有关论坛和ActiveMQ常见问题解答的大量信息,用于配置扩展,性能和高可用性.此外,ActiveMQ将在规范最终确定时支持AMQP 1.0,以及其他有线格式,如STOMP.

ActiveMQ的另一个好处是它的Apache项目,因此开发人员社区存在多样性 - 而且它与一家公司无关.


小智 22

我没有使用过ActiveMQ或RabbitMQ但是使用过ZeroMQ.我在ZeroMQ和ActiveMQ等之间看到的最大区别在于0MQ是无代理的,并且没有内置的可靠性来进行消息传递.如果您正在寻找一个易于使用的消息传递API,支持许多消息模式,传输,平台和语言绑定,那么0MQ绝对值得一看.如果您正在寻找一个完整的消息传递平台,那么0MQ可能不适合该账单.

有关如何使用0MQ的大量示例,请参见www.zeromq.org/docs:cookbook.

我成功地使用0MQ在电力使用监控应用程序中传递消息(请参阅http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/)


Nic*_*ick 14

我正在使用zeroMQ.我想要一个简单的消息传递系统,我不需要代理的复杂性.我也不想要一个庞大的面向Java的企业系统.

如果你想要一个快速,简单的系统,你需要支持多种语言(我使用C和.net),那么我建议你看看0MQ.


Noc*_*ris 10

我只能加上关于ActiveMQ的2美分,但因为这是最流行的一个:

您想要写的语言可能很重要.尽管ActiveMQ确实拥有大多数客户端,但与Java库相比,它们的C#实现远非完整.

这意味着一些基本功能是片状的(故障转移协议......好吧......在某些情况下失败,没有重新传送支持)而其他根本就不存在.由于.NET似乎对项目来说并不是那么重要,因此开发速度相当慢,并且似乎没有任何发布计划.Trunk经常被破坏,所以如果你考虑到这一点,你可能想要考虑为项目做出贡献,如果你想要继续前进的话.

然后有ActiveMQ本身,它有很多很好的功能,但也有一些非常奇怪的问题.出于稳定性原因,我们使用activemq的Fuse(Progress)版本,但即便如此,您仍需要记住几个奇怪的"错误":

  • 在某些情况下停止发送消息的经纪人
  • 日志错误使队列显示不再存在的消息(它们不会传递给消费者,但仍然)
  • 优先权仍未实施(自人类开始以来在问题列表中)
  • 等等

总而言之,如果你能解决它的问题,这是一个非常好的产品:

A)在使用.NET时不害怕积极参与
B)在java中开发;-)

  • 次要更新:从一段时间以来,KahaDB是ActiveMQ的默认持久性存储.但是:它根本不稳定.在我们的测试中,我们已经看到数据库损坏(一些可恢复,其他人花费我们大约15.000.000消息)注意这个 (5认同)

小智 8

ZeroMQ实际上是零排队!这是一个真正的错误!它没有排队,主题,持久性,没有!它只是套接字API的中间件.如果你看起来很酷!别忘了!它不像activeMQ或rabbitmq.


she*_*eki 8

http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/上对RabbitMQ ActiveMQ和QPID的功能和性能进行了比较.

就个人而言,我已经尝试了以上三种.根据我的说法,RabbitMQ是最好的性能,但它没有故障转移和恢复选项.ActiveMQ功能最多,但速度较慢.

更新: HornetQ也是您可以查看的选项,它是JMS Complaint,如果您正在寻找基于JMS的解决方案,它是比ActiveMQ更好的选择.


ron*_*ron 6

我在这里写了关于AMQP,Qpid和ZeroMQ的初步经验:http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

我的主观意见是,如果你真的需要持久的消息传递设备,并且不太关心经纪人可能是瓶颈,那么AMQP就没问题了.此外,AMQP目前缺少C++客户端(Qpid没有赢得我的支持;但不确定ActiveMQ客户端),但可能正在进行中.ZeroMQ可能就是这样.


Kel*_*lly 6

我已经在生产环境中使用ActiveMQ大约3年了.虽然它完成了工作,但排列正常工作且无错误的客户端库版本可能是一个问题.目前正在寻求过渡到RabbitMQ.


crb*_*crb 5

这篇博客文章的评论中有一些讨论,关于Twitter编写自己的消息队列,这可能很有趣.

Steve对ActiveMQ,RabbitMQ等进行了大量的负载和压力测试.ActiveMQ实际上非常慢(比Kestrel慢得多),RabbitMQ一直与太多的生产者和太少的消费者崩溃.

你最初可能不会像Twitter一样加载:)


小智 5

很少有应用程序具有与ActiveMQ一样多的调整配置.使ActiveMQ脱颖而出的一些功能包括:

可配置的预取大小.可配置的线程.可配置的故障转移.对生产者的可配置管理通知.......详细信息:

http://activemq.net/blog http://activemq.apache.org