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到Scala的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理通知给生产者。 …详情:
Abie,这一切都归结于你的使用情况。 不要依赖别人的用例帐户,而是随意将您的用例发布到rabbitmq-discuss列表。 在twitter上询问也会给你一些回应。 祝好,亚历克西斯
关于ZeroMQ又名0MQ,正如你可能已经知道的那样,它会每秒给你发送最多的消息(上次我们检查的时候,他们的参考服务器上每秒大概有4百万),但正如你可能已经知道的那样,文件不存在。 你将很难find如何启动服务器,更不用说如何使用它们。 我想这就是为什么没有人贡献0MQ的部分原因。
玩的开心!
如果你也对商业实现感兴趣,你应该从我的渠道看看涅ana。
Nirvana在金融服务业内被大量使用,用于大规模低延迟交易和价格分配平台。
支持企业,networking和移动领域的各种客户端编程语言。
如果透明HA或负载平衡对您很重要,则集群function非常先进,值得一看。
Nirvana可以免费下载用于开发目的。