ActiveMQ或RabbitMQ或ZeroMQ或

时间:2009-04-08 18:26:04

标签: jms rabbitmq activemq message-queue zeromq

我们有兴趣听听ActiveMQ vs RabbitMQ与ZeroMQ的优缺点。有关任何其他有趣的消息队列的信息也是受欢迎的。

17 个答案:

答案 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个产品:

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

答案 1 :(得分:174)

您为什么错过SparrowStarlingKestrelAmazon SQSBeanstalkdKafkaIronMQ?< / p>

消息队列服务器

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

<强>麻雀

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

<强>斯塔林

<强>隼

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

<强>的RabbitMQ

  • RabbitMQ是Erlang中的消息队列服务器
  • 将作业存储在内存中(消息队列)

Apache ActiveMQ

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

<强> Beanstalkd

亚马逊SQS

<强>卡夫卡

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

<强> ZMQ

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

<强> EagleMQ

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

<强> IronMQ

  • IronMQ
  • 写在Go
  • 完全托管的队列服务
  • 既可以作为云版本也可以作为内部部署

我希望这对我们有所帮助。 source

答案 2 :(得分:83)

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

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


更新

详细说明保罗在评论中添加的内容。 page mentioned above在2010年之后已经死了,所以请阅读一小撮盐。很多东西已经在3年内改变了。

History of Wiki Page

答案 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脱颖而出的一些功能包括:

可配置的预取大小。 可配置的线程。 可配置的故障转移。 对生产者的可配置管理通知。 ... 详情请见:

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

答案 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上询问也会得到一些回复。祝愿,亚历克西斯