ActiveMQ或RabbitMQ或ZeroMQ或

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

编辑:我最初的答案强调AMQP。 我决定改写它以提供更广泛的观点。

这三种消息传递技术在构build分布式系统上有不同的方法

RabbitMQ是AMQP协议(与Apache Qpid一起)的主要实现之一。 因此,它实现了代理体系结构,这意味着消息在发送到客户机之前在中央节点上排队。 这种方法使得RabbitMQ非常易于使用和部署,因为只需几行代码即可支持路由,负载平衡或持久消息队列等高级场景。 然而,这也使得它的可扩展性和“较慢”,因为中央节点增加了延迟和消息包络是相当大的。

ZeroMq是一个非常轻量级的邮件系统,专为高吞吐量/低延迟情况而devise,就像您在金融领域可以find的一样。 Zmq支持许多先进的消息传递scheme,但与RabbitMQ相反,您必须通过组合各种框架(例如:套接字和设备)来实现其中的大部分function。 Zmq非常灵活,但是在能够做任何比发送消息更复杂的事情之前,你必须研究指南的80页左右 (我推荐阅读任何编写分布式系统的人,即使你不使用Zmq)在两个同行之间。

ActiveMQ处于中间地带。 像Zmq一样,可以同时部署代理和P2P拓扑。 像RabbitMQ一样,实现高级scheme更容易,但通常是以原始性能为代价的。 这是消息的瑞士军刀:-)。

最后,所有3个产品:

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

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

消息队列服务器

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

麻雀

  • Alex MacCaw写的
  • Sparrow是一个用Ruby编写的轻量级队列,可以“说memcache”

欧椋鸟

  • 由布莱恩·库克在Twitter上撰写
  • Starling是基于MemCached的Message Queue Server
  • 用Ruby编写
  • 将作业存储在内存中(消息队列)
  • 文档:一些很好的教程,例如关于八哥和工作的railscast或者关于八哥的这个博客文章

红隼

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

的RabbitMQ

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

Apache ActiveMQ

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

Beanstalkd

  • 由Philotic公司编写,以改善Facebook应用程序的响应时间
  • 内存中的工作队列服务主要用C写成
  • 纪录: http : //nubyonrails.com/articles/about-this-blog-beanstalk-messaging-queue

亚马逊SQS

  • 亚马逊简单队列服务

卡夫卡

  • 写在斯卡拉的LinkedIn
  • 由LinkedIn使用来卸载所有页面和其他视图的处理
  • 默认使用持久性,对热数据使用操作系统磁盘caching(具有更高的吞吐量,那么上面的任何一个都启用了持久性)
  • 支持在线作为离线处理

ZMQ

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

EagleMQ

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

IronMQ

  • IronMQ
  • 写在Go
  • 完全pipe理的队列服务
  • 可用作云版本和本地

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

更多的信息比你想知道的更多:

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


UPDATE

只是详细说明保罗在评论中加了什么。 上面提到的页面在2010年之后就已经死了,所以用一点盐来阅读。 很多东西已经在3年内改变了。

维基的历史

这真的取决于你的使用情况。

比较0MQ与ActiveMQ或RabbitMQ是不公平的。 ActiveMQ和RabbitMQ是需要安装和pipe理的邮件系统。 他们提供比ZeroMQ更多的function。 他们有真正的持久队列,支持交易等

ZeroMQ是一个轻量级的面向消息的套接字实现。 它也适用于进程内asynchronous编程。 可以在ZeroMQ上运行“企业消息传递系统”,但是你必须自己实施很多。

所以:

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

ZeroMQ是一个面向IPC库的消息。

这里有一个比较RabbitMQ和ActiveMQ。 开箱即用,ActiveMQ被configuration为保证消息传递 – 与较不可靠的消息传递系统相比,ActiveMQ可以给人印象较慢的印象。 如果您愿意,您可以随时更改性能configuration,并获得至less与其他任何消息系统一样的良好性能。 至less你有这个select。 有关论坛和ActiveMQ FAQ的大量信息可用于configuration扩展,性能和高可用性。 此外,ActiveMQ将在规范定稿时支持AMQP 1.0,以及STOMP等其他线路格式。

ActiveMQ的另外一个优点是它是一个Apache项目,所以开发者社区多样化,而且不受一家公司的约束。

我没有使用过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/

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

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

我只能添加我的2分有关ActiveMQ,但因为这是最stream行的之一:

你想写的语言可能很重要。 尽pipeActiveMQ确实拥有大多数客户端,但与Java库相比,他们的C#实现还远远没有完成。

这意味着一些基本的function是片状的(故障转移协议,以及…在某些情况下失败,没有重新传送支持)等简单地不存在。 由于.NET对于这个项目似乎并不重要,所以开发速度相当缓慢,似乎没有任何发布计划。 树干经常被打破,所以如果你真的考虑到这一点,你可能要考虑为项目做出贡献,如果你想要的东西继续前进。

然后有ActiveMQ本身有很多很好的function,但也有一些非常奇怪的问题。 由于稳定性的原因,我们使用了activemq的Fuse(Progress)版本,但即便如此,还是有一些您想记住的奇怪的“bug”:

  • 经纪人在某些场合停止发送消息
  • 日志错误使得队列显示不存在的消息(它们不会传递给消费者,但仍然)
  • 优先级还没有实现(自人类开始以来就在问题列表上)
  • 等等

总而言之,如果你可以忍受它的问题,这是一个相当不错的产品:

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

ZeroMQ真的是零队列! 这真是一个错误! 它没有排队,主题,坚持,没有! 它只是套接字API的中间件。 如果这是你看起来很酷! 否则忘记它! 它不像activeMQ或rabbitmq。

RabbitMQ ActiveMQ和QPID的特点和性能比较
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/

我个人已经尝试了以上三种。 根据我的说RabbitMQ是最好的性能,但它没有故障切换和恢复选项。 ActiveMQfunction最多,但速度较慢。

更新:如果你正在寻找一个基于JMS的解决scheme, HornetQ也是一个你可以研究的选项,它是JMS Complaint,比ActiveMQ更好的select。

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

我的主观意见是,如果你真的需要持续的信息传递设施,并且不太关心经纪人可能是瓶颈的话,那么AMQP就可以。 此外,C ++客户端目前缺lessAMQP(Qpid没有赢得我的支持,但不确定ActiveMQ客户端),但也许正在进行中。 否则ZeroMQ可能会是这样。

我已经在生产环境中使用ActiveMQ大约3年了。 虽然它完成了工作,排队版本的客户端库正常工作,并没有bug的问题可能是一个问题。 目前正在寻求过渡到RabbitMQ。

在这篇博文的评论中有一些讨论,关于Twitter写他们自己的消息队列,这可能是有趣的。

Steve对ActiveMQ,RabbitMQ等进行了广泛的加载和压力testing.ActiveMQ实际上相当慢(比Kestrel慢得多),RabbitMQ一直崩溃,生产者过多,消费者太less。

但是,你可能最初不会有类似Twitter的负载:)

很less有应用程序具有与ActiveMQ一样多的调整configuration。 使ActiveMQ突出的一些function是:

可configuration的预取大小。 可configuration的线程。 可configuration的故障转移。 可configuration的pipe理通知给生产者。 …详情:

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

Abie,这一切都归结于你的使用情况。 不要依赖别人的用例帐户,而是随意将您的用例发布到rabbitmq-discuss列表。 在twitter上询问也会给你一些回应。 祝好,亚历克西斯

关于ZeroMQ又名0MQ,正如你可能已经知道的那样,它会每秒给你发送最多的消息(上次我们检查的时候,他们的参考服务器上每秒大概有4百万),但正如你可能已经知道的那样,文件不存在。 你将很难find如何启动服务器,更不用说如何使用它们。 我想这就是为什么没有人贡献0MQ的部分原因。

玩的开心!

如果你也对商业实现感兴趣,你应该从我的渠道看看涅ana。

Nirvana在金融服务业内被大量使用,用于大规模低延迟交易和价格分配平台。

支持企业,networking和移动领域的各种客户端编程语言。

如果透明HA或负载平衡对您很重要,则集群function非常先进,值得一看。

Nirvana可以免费下载用于开发目的。