RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocaol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。
在此之前,有一些消息中间件的商业实现,比如微软的MSMQ、IBM的WebSphere等。
由于高昂的价格,一般只应用于大型组织机构,它们需要可靠性、解耦及实时消息通信的功能。
由于商业壁垒,商业MQ供应商想要解决应用互通的问题,而不是去创建标准来实现不痛的MQ产品间的互通,或者允许应用程序更改MQ平台。
为了打破这个壁垒,同事为了能够让消息在各个消息队列平台间互融互痛,JMS(Java Message Service)应运而生。
JMS试图通过提供公共Java API的方式,隐藏单独MQ产品供应商提供的实际接口,从而跨越了壁垒,以及解决了互通问题。
从技术上讲,Java应用程序只需针对JMS API编程,选择合适的MQ驱动即可,JMS会打理好其他部分。
ActiveMQ就是JMS的一种实现。
不过尝试使用单独标准化接口来胶合众多不同的接口,最终会暴露出问题,使得应用程序变得更加脆弱。
所以急需一种新的消息通信标准化方案。
在2006年6月,由Cisco、Redhat、iMatix等联合制定了AMQP的公开标准,由此AMQP登上了历史的舞台。
它是应用层协议的一个开放标准,以解决众多消息中间件的需求和拓扑结构问题。
它为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。
RabbitMQ最初版本实现了AMQP的一个关键特性:
使用协议本身就可以对队列和交换器这样的资源进行配置。
对于商业MQ供应商来说,资源配置需要通过管理终端的特定工具才能完成。
RabbitMQ的资源配置能力使其成为构建分布式应用的最完美的通信总线,特别有助于充分利用基于云的资源和进行快速开发。
RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。
取Rabbit这样一个名字,是因为兔子行动非常迅速且繁殖起来非常疯狂,RabbitMQ的开创者认为以此命名这个分布式软件再合适不过了。

RabbitMQ发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。
RabbitMQ的具体特点可以概况为以下几点:
- 可靠性:RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。
- 灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。
- 扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
- 高可用性:队列可用在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
- 多种协议:RabbitMQ除了原生支持AMQP协议,还支持STOMP、MQTT等多种消息中间件协议。
- 多语言客户端:RabbitMQ几乎支持所有常用语言,比如Java、Python、Ruby、PHP、C#等
- 管理界面:RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
- 插件机制:RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。