我们有兴趣听听ActiveMQ vs RabbitMQ与ZeroMQ的优缺点。有关任何其他有趣的消息队列的信息也是受欢迎的。
答案 0 :(得分:342)
编辑:我的初步答案非常关注AMQP。我决定重写它以提供关于该主题的更广泛的观点。
这三种消息传递技术在构建分布式系统方面有不同的方法:
RabbitMQ 是AMQP协议(以及Apache Qpid)的主要实现之一。因此,它实现了代理体系结构,这意味着消息在发送到客户端之前在中心节点上排队。这种方法使RabbitMQ非常易于使用和部署,因为只需几行代码就可以支持路由,负载平衡或持久消息队列等高级方案。但是,由于中央节点增加了延迟并且消息包络非常大,因此它的可扩展性和“慢”也降低了。
ZeroMq 是一个非常轻量级的消息传递系统,专为高吞吐量/低延迟场景而设计,例如您可以在金融领域找到的场景。 Zmq支持许多高级消息传递方案,但与RabbitMQ相反,您必须通过组合框架的各个部分(例如:套接字和设备)来自己实现大部分消息。 Zmq非常灵活,但你必须研究80 pages or so of the guide(我推荐阅读任何编写分布式系统的人,即使你不使用Zmq),然后才能做任何比在2之间发送消息更复杂的事情。对等体。
ActiveMQ 处于中间地带。与Zmq一样,它可以与代理和P2P拓扑一起部署。与RabbitMQ一样,实现高级方案更容易,但通常以原始性能为代价。这是消息传递的瑞士军刀: - )。
最后,所有3个产品:
答案 1 :(得分:174)
您为什么错过Sparrow,Starling,Kestrel,Amazon SQS,Beanstalkd,Kafka,IronMQ?< / p>
消息队列服务器
消息队列服务器有各种语言版本,Erlang(RabbitMQ),C(beanstalkd),Ruby(Starling或Sparrow),Scala(Kestrel,Kafka)或Java(ActiveMQ)。可以找到简短的概述here
<强>麻雀强>
<强>斯塔林强>
<强>隼强>
<强>的RabbitMQ 强>
Apache ActiveMQ
<强> Beanstalkd 强>
亚马逊SQS
<强>卡夫卡强>
<强> ZMQ 强>
<强> EagleMQ 强>
<强> IronMQ 强>
我希望这对我们有所帮助。 source
答案 2 :(得分:83)
比您想要了解的更多信息:
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
详细说明保罗在评论中添加的内容。 page mentioned above在2010年之后已经死了,所以请阅读一小撮盐。很多东西已经在3年内改变了。
答案 3 :(得分:71)
这实际上取决于你的用例。
将0MQ与ActiveMQ或RabbitMQ进行比较是不公平的。 ActiveMQ和RabbitMQ是需要安装和管理的消息系统。 它们提供的功能比ZeroMQ要多得多。他们有真正的持久性队列,支持交易等。
ZeroMQ是一个轻量级的面向消息的套接字实现。它也适用于进程内异步编程。可以在ZeroMQ上运行“企业消息传递系统”,但您必须自己实施很多。
所以:
ActiveMQ,RabbitMQ,Websphere MQ&amp; MSMQ是“企业消息队列”
ZeroMQ是面向消息的IPC库。
答案 4 :(得分:34)
RabbitMQ和ActiveMQ here之间有比较。开箱即用,ActiveMQ配置为保证消息传递 - 与不太可靠的消息传递系统相比,这会给人留下缓慢的印象。如果您愿意,您可以随时更改性能配置,并获得至少与其他任何邮件系统一样的性能。至少你有这个选择。有关论坛和ActiveMQ常见问题解答的大量信息,用于配置扩展,性能和高可用性。此外,ActiveMQ将在规范最终确定时支持AMQP 1.0,以及其他有线格式,如STOMP。
ActiveMQ的另一个好处是它是一个Apache项目,因此开发人员社区存在多样性 - 而且它与一家公司无关。
答案 5 :(得分: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/)
答案 6 :(得分:14)
我正在使用zeroMQ。我想要一个简单的消息传递系统,我不需要代理的复杂性。我也不想要一个庞大的面向Java的企业系统。
如果你想要一个快速,简单的系统,你需要支持多种语言(我使用C和.net),那么我建议你看看0MQ。
答案 7 :(得分:10)
我只能加上关于ActiveMQ的2美分,但因为这是最受欢迎的一个:
您想要写的语言可能很重要。尽管ActiveMQ确实拥有大多数客户端,但与Java库相比,它们的C#实现还远未完成。
这意味着一些基本功能是片状的(故障转移协议......好吧......在某些情况下失败,没有重新传送支持)而其他根本就不存在。由于.NET似乎对项目来说并不是那么重要,因此开发速度相当慢,并且似乎没有任何发布计划。 Trunk经常被破坏,所以如果你考虑到这一点,你可能想要考虑为项目做出贡献,如果你想要继续前进的话。
然后有ActiveMQ本身,它有很多很好的功能,但也有一些非常奇怪的问题。出于稳定性原因,我们使用activemq的Fuse(Progress)版本,但即便如此,您仍需要记住几个奇怪的“错误”:
总而言之,如果您能解决问题,这是一个非常好的产品:
A)在使用.NET时不害怕积极参与 B)在java中开发; - )
答案 8 :(得分:8)
ZeroMQ实际上是零队列!这是一个真正的错误!它没有排队,主题,持久性,没有!它只是套接字API的中间件。如果你看起来很酷!别忘了!它不像activeMQ或rabbitmq。
答案 9 :(得分:8)
对于在Rabbit上给出的RabbitMQ ActiveMQ和QPID的功能和性能进行了比较 http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/
就个人而言,我已经尝试了以上三种。根据我的说法,RabbitMQ是最好的性能,但它没有故障转移和恢复选项。 ActiveMQ功能最多,但速度较慢。
更新: HornetQ也是一个你可以研究的选项,它是JMS Complaint,如果你正在寻找基于JMS的解决方案,它是比ActiveMQ更好的选择。
答案 10 :(得分:6)
我已经在生产环境中使用ActiveMQ大约3年了。虽然它完成了工作,但排列正常工作且无错误的客户端库版本可能是一个问题。目前正在寻求过渡到RabbitMQ。
答案 11 :(得分:6)
我在这里写了关于AMQP,Qpid和ZeroMQ的初步经验:http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/
我的主观意见是,如果您确实需要持久消息传递工具,并且不太关心代理可能是瓶颈,那么AMQP就可以了。此外,AMQP目前缺少C ++客户端(Qpid没有赢得我的支持;但不确定ActiveMQ客户端),但可能正在进行中。 ZeroMQ可能就是这样。
答案 12 :(得分:5)
很少有应用程序具有与ActiveMQ一样多的调整配置。使ActiveMQ脱颖而出的一些功能包括:
可配置的预取大小。 可配置的线程。 可配置的故障转移。 对生产者的可配置管理通知。 ... 详情请见:
答案 13 :(得分:5)
this blog post的评论中有一些关于Twitter编写自己的消息队列的讨论,这可能很有趣。
史蒂夫承受了巨大的压力和压力 测试ActiveMQ,RabbitMQ等 ActiveMQ实际上非常慢(很多 比Kestrel慢一点,RabbitMQ 持续崩溃太多了 生产者和消费者太少。
然而,您最初可能不会像Twitter一样加载:)
答案 14 :(得分:0)
如果您对商业实施感兴趣,您应该从my-channels查看Nirvana。
Nirvana在金融服务行业中大量用于大规模低延迟交易和价格分配平台。
在企业,Web和移动域中支持各种客户端编程语言。
如果透明的HA或负载平衡对您很重要,则群集功能非常先进,值得一看。
Nirvana可以免费下载用于开发目的。
答案 15 :(得分:0)
关于ZeroMQ又名0MQ,正如您可能已经知道的那样,它是每秒钟可以获得最多消息的消息(上次我检查时,它们的ref服务器上每秒大约有4百万条消息),但是你可能已经知道了知道,文档不存在。您将很难找到如何启动服务器,更不用说如何使用它们了。我想这部分原因还没有人为0MQ做出贡献。
玩得开心!
答案 16 :(得分:0)
Abie,这一切都取决于你的用例。您可以随意将您的用例发布到rabbitmq-discuss列表,而不是依赖其他人对其用例的说明。在Twitter上询问也会得到一些回复。祝愿,亚历克西斯