我们很想听听在ActiveMQ、RabbitMQ和ZeroMQ之间使用的经验,包括它们各自的优缺点。如果有关于其他有趣的消息队列的信息也欢迎分享。
我们很想听听在ActiveMQ、RabbitMQ和ZeroMQ之间使用的经验,包括它们各自的优缺点。如果有关于其他有趣的消息队列的信息也欢迎分享。
编辑:我的初始答案强调了AMQP。我决定重写它,以提供更广泛的视角。
这三种消息传递技术在构建分布式系统方面有不同的方法:
RabbitMQ是AMQP协议的主要实现之一(与Apache Qpid一起)。因此,它实现了代理架构,这意味着消息在发送到客户端之前会在中心节点上排队。这种方法使得RabbitMQ非常易于使用和部署,因为只需几行代码就支持高级场景,如路由、负载平衡或持久消息排队。但是,由于中心节点增加了延迟并且消息信封相当大,这也使得它不太可扩展和“较慢”。
ZeroMq是一个非常轻量级的消息传递系统,专门为高吞吐量/低延迟场景设计,例如您可以在金融界找到的场景。Zmq支持许多高级消息传递场景,但与RabbitMQ相反,您将不得不通过组合框架的各个部分(例如:套接字和设备)自己实现大部分功能。Zmq非常灵活,但您必须先学习大约80页的指南(我建议任何编写分布式系统的人都阅读,即使您不使用Zmq),然后才能做比在两个对等方之间发送消息更复杂的事情。
ActiveMQ处于中间地带。与Zmq一样,它可以使用代理和P2P拓扑部署。像RabbitMQ一样,它更容易实现高级场景,但通常以原始性能为代价。这是消息传递的瑞士军刀 :-)。
最后,所有三个产品:
你为什么错过了Sparrow、Starling、Kestrel、Amazon SQS、Beanstalkd、Kafka和IronMQ?
消息队列服务器
消息队列服务器可用于各种语言,如Erlang(RabbitMQ)、C(beanstalkd)、Ruby(Starling或Sparrow)、Scala(Kestrel、Kafka)或Java(ActiveMQ)。可以在这里找到简短的概述
Sparrow
Starling
Kestrel
RabbitMQ
Apache ActiveMQ
Beanstalkd
Amazon SQS
Kafka
ZMQ
EagleMQ
IronMQ
我希望这对我们有所帮助。 来源
比你想知道的更多信息:
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
在评论中补充一下Paul所说的。上面提到的页面已经在2010年之后失效,请用谨慎的心态阅读。在过去的3年中,很多东西发生了改变。
这真的取决于您的使用情况。
将0MQ与ActiveMQ或RabbitMQ进行比较是不公平的。ActiveMQ和RabbitMQ是消息系统,需要安装和管理。它们在功能方面比ZeroMQ提供了更多,例如具有真正的持久队列、事务支持等等。
ZeroMQ是一个轻量级的面向消息的套接字实现。它也适用于进程内异步编程。可以在ZeroMQ上运行“企业消息系统”,但您必须自己进行大量实现。
所以:
ActiveMQ、RabbitMQ、Websphere MQ和MSMQ是“企业消息队列”
ZeroMQ是面向消息的IPC库。
这里有一篇RabbitMQ和ActiveMQ的比较文章点击这里。默认情况下,ActiveMQ被配置为保证消息传递的可靠性 - 这可能会给人留下它比不那么可靠的消息系统慢的印象。如果您愿意,您总是可以更改配置以获得至少与任何其他消息系统一样好的性能,并且您至少有这个选项。关于扩展、性能和高可用性方面的配置,ActiveMQ论坛和FAQ中有大量信息。此外,当规范最终确定时,ActiveMQ将支持AMQP 1.0,以及其他线路格式(如STOMP)。
ActiveMQ的另一个优点是它是一个Apache项目,因此开发者社区多样化,而且它不受任何一家公司的约束。
我没有使用过ActiveMQ或RabbitMQ,但使用了ZeroMQ。据我所知,ZeroMQ和ActiveMQ等的最大区别在于0MQ没有代理(brokerless),也没有内置的消息传递可靠性。如果你正在寻找一个易于使用的消息API,支持许多消息模式、传输、平台和语言绑定,则0MQ绝对值得一看。如果你正在寻找一个完整的消息平台,那么0MQ可能不太合适。
请参阅www.zeromq.org/docs:cookbook,了解0MQ的用法示例。
我成功地在用电监测应用程序中使用0MQ进行消息传递(请参见http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/)。
我正在使用zeroMQ。我需要一个简单的消息传递系统,不需要中间人的复杂性。我也不想要一个庞大的Java企业级系统。
如果你需要一个快速、简单的系统,并且需要支持多种语言(我使用C和.net),那么我建议看一下0MQ。
关于ActiveMQ,我只能提供一些个人意见,但它是其中最受欢迎的之一:
你想要使用的编程语言可能很重要。尽管ActiveMQ为大多数语言都提供了客户端,但与Java库相比,它们的C#实现还不完整。
这意味着一些基本功能可能有问题(故障转移协议在某些情况下失效,没有重新传递支持),而其他功能则根本不存在。由于.NET似乎对该项目并不那么重要,因此开发速度相对较慢,也没有发布计划。主干代码库经常出现问题,因此如果您考虑使用此产品,则可能需要考虑参与项目贡献以推进事务的进展。
然后还有ActiveMQ本身,它拥有许多很好的功能,但也存在一些非常奇怪的问题。我们出于稳定性原因使用Fuse(Progress)版本的activemq,但即使如此,仍有一些奇怪的“错误”需要记住:
总的来说,如果您能接受它的问题,这是一个相当不错的产品:
A)如果使用.NET时敢于积极参与
B)使用Java开发 ;-)
ZeroMQ真的没有队列!这是一个真正的误解!它没有队列、主题、持久性,什么都没有!它只是一种用于套接字API的中间件。如果这正是你所追求的酷炫特性,那就使用它吧!否则,请忘记它!它不像ActiveMQ或RabbitMQ。