我们有兴趣听听ActiveMQ vs RabbitMQ vs ZeroMQ的优缺点。还欢迎提供有关任何其他有趣的消息队列的信息。


当前回答

编辑:我最初的回答非常关注AMQP。我决定重写它,以提供一个更广泛的观点关于这个主题。

这3种消息传递技术在构建分布式系统方面有不同的方法:

RabbitMQ is one of the leading implementation of the AMQP protocol (along with Apache Qpid). Therefore, it implements a broker architecture, meaning that messages are queued on a central node before being sent to clients. This approach makes RabbitMQ very easy to use and deploy, because advanced scenarios like routing, load balancing or persistent message queuing are supported in just a few lines of code. However, it also makes it less scalable and “slower” because the central node adds latency and message envelopes are quite big.

ZeroMq is a very lightweight messaging system specially designed for high throughput/low latency scenarios like the one you can find in the financial world. Zmq supports many advanced messaging scenarios but contrary to RabbitMQ, you’ll have to implement most of them yourself by combining various pieces of the framework (e.g : sockets and devices). Zmq is very flexible but you’ll have to study the 80 pages or so of the guide (which I recommend reading for anybody writing distributed system, even if you don’t use Zmq) before being able to do anything more complicated than sending messages between 2 peers.

ActiveMQ处于中间地带。与Zmq一样,它可以与代理和P2P拓扑一起部署。像RabbitMQ一样,它更容易实现高级场景,但通常是以牺牲原始性能为代价的。这是信息传递的瑞士军刀:-)。

最后,全部3个产品:

为最常见的语言(c++, Java, .Net, Python, Php, Ruby,…)提供客户端api 有强有力的文档 得到积极支持

其他回答

ZeroMQ真的是零队列!这真是个错误!它没有队列、主题、持久性,什么都没有!它只是套接字API的中间件。如果它是你看起来很酷!否则就忘了它吧!它不像activeMQ或rabbitmq。

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

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


更新

只是在详细说明保罗在评论中补充的内容。上面提到的页面在2010年之后就消失了,所以阅读时要有所保留。3年里很多东西都变了。

我只能对ActiveMQ补充我的2分,但由于这是最受欢迎的之一:

你想写的语言可能很重要。虽然ActiveMQ确实有一个客户端,但与Java库相比,他们的c#实现还远远不够完整。

这意味着一些基本功能是不可靠的(故障转移协议……嗯…在某些情况下失败,没有重新交付支持)和其他根本不存在。由于. net对项目似乎不是那么重要,所以开发相当缓慢,似乎也没有任何发布计划。Trunk经常是坏的,所以如果你真的考虑到这一点,如果你想让事情继续下去,你可能会考虑为项目做出贡献。

然后是ActiveMQ本身,它有很多不错的功能,但也有一些非常奇怪的问题。我们使用Fuse (Progress)版本的activemq出于稳定的原因,但即使这样,也有几个奇怪的“bug”,你要记住:

在某些情况下停止发送消息的代理 日志错误使队列显示不再存在的消息(它们没有被传递给消费者,但仍然) 优先级仍然没有实现(自从人类诞生以来就在问题列表上) 等等。

总而言之,如果你能接受它的问题,这是一个非常好的产品:

A)在使用。net时不害怕主动参与 B)用java开发;-)

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

史蒂夫承受了很大的负荷和压力 ActiveMQ, RabbitMQ等的测试。 ActiveMQ实际上相当慢(非常慢) 比Kestrel慢),RabbitMQ 总是因为太多而崩溃 生产者和太少的消费者。

你可能不会有像twitter一样的初始加载:)

我用的是zeroMQ。我想要一个简单的消息传递系统,我不需要复杂的代理。我也不想要一个巨大的面向Java的企业系统。

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