目录
[1. RabbitMQ概述](#1. RabbitMQ概述)
[RabbitMQ 介绍](#RabbitMQ 介绍)
1. RabbitMQ概述
前言
在互联网行业中,许多公司都喜欢用动物命名产品,或者作为公司的logo和吉祥物 。例如:腾讯的企鹅、京东的狗、美团的袋鼠、携程的海豚,而阿里更是拥有蚂蚁、飞猪、天猫、菜鸟、闲鱼、盒马等,以一己之力组建了一个"动物园" 。
Rabbit 同样也是一个公司名 。MQ(Message Queue) 是消息队列的意思,而 RabbitMQ 就是 Rabbit 企业下的一个消息队列产品 。
RabbitMQ 是一个实现了 AMQP 的消息队列服务,是当前主流的消息中间件之一 。
AMQP (Advanced Message Queuing Protocol,高级消息队列协议): 是一个通用的应用层协议,提供统一的消息服务,专为面向消息的中间件设计 。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间件、开发语言等条件的限制 。
什么是MQ
MQ(Message Queue) 从字面意思上看,本质上是一个先进先出(FIFO)的队列。只不过队列中存放的内容是消息(Message) 。消息的形态可以非常简单(如文本字符串、JSON等),也可以很复杂(如内嵌对象) 。
MQ 多用于分布式系统之间进行通信 。系统之间的调用通常有两种方式:
- 同步通信: 直接调用对方的服务,数据从一端发出后立即就可以达到另一端(如接口调用) 。

- 异步通信: 数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端 。这个用于临时存储的容器的具体实现之一就是 MQ 。RabbitMQ 就是 MQ 的一种实现 。

MQ的作用
MQ 的主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用 。
可以把 MQ 想象成一个仓库:采购部门进货之后把零件放进仓库,生产部门从仓库中取出零件并加工成产品 。
- 区别在于: 仓库里存放和转发的是物品,而 MQ 负责存储和转发的是消息 。

主要核心作用:
-
- 异步解耦: 在业务流程中,一些操作可能非常耗时但不需要即时返回结果 。可以借助 MQ 把这些操作异步化 。例如:用户注册后发送注册短信或邮件通知,可作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功 。
-
- 流量削峰: 在突发流量剧增的情况下,应用需要继续发挥作用 。如果以处理这类峰值为标准来投入资源,会造成巨大的浪费 。使用 MQ 能让关键组件支撑突发访问压力,避免系统崩溃 。例如秒杀或促销活动中,利用 MQ 控制流量并将请求排队,系统再根据自身处理能力逐步消化请求 。
-
- 消息分发: 当多个系统需要对同一数据做出响应时,可以使用 MQ 进行消息分发 。例如支付成功后,支付系统向 MQ 发送消息,其他系统直接订阅该消息,而无需轮询数据库 。
-
- 延迟通知: 在需要在特定时间后发送通知的场景中,可以使用 MQ 的延迟消息功能 。例如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单 。
为什么选择RabbitMQ
目前业界有很多 MQ 产品,例如 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ 等,也有直接使用 Redis 充当消息队列的案例 。这些产品各有侧重,没有绝对的好坏,只有适合与否,需结合自身需求与产品特征综合考虑 。
以下为当前最主流的 3 种 MQ 产品对比:
|--------------|----------|-----------------------------------------------------------------------------------------|----------------------------------|
| MQ 产品 | 开发语言 | 特点与优势 | 适用场景 |
| Kafka | / | 追求高吞吐量,性能卓越,单机吞吐可达十万级;在日志领域比较成熟,但功能较为简单 。 | 首选用于日志收集和传输 。 |
| RocketMQ | Java | 由阿里开源并捐赠给 Apache ;借鉴了 Kafka 并做出改进,经历过多年双十一洗礼,在可用性、可靠性及稳定性上表现出色 。缺点是支持的客户端语言不多,社区活跃度一般 。 | 适合对于可靠性要求比较高,且并发比较大的场景(如互联网金融) 。 |
| RabbitMQ | Erlang | MQ 功能完备,几乎支持所有主流语言,开源管理界面非常友好,性能较好,吞吐量能达到万级,社区活跃度较高 。 | 比较适合中小型公司,数据量没那么大且并发没那么高的场景 。 |
综合考量: 由于 RabbitMQ 的综合能力较强,中小型项目没有极高的高并发需求,且 RabbitMQ 社区成熟、管理界面友好,因此作为主要学习和使用的对象 。
RabbitMQ 介绍
- RabbitMQ 官网: RabbitMQ: One broker to queue them all | RabbitMQ
发展历史与背景
RabbitMQ 是采用 Erlang 语言实现 AMQP 的消息中间件,最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计 。在此之前,虽有微软的 MSMQ、IBM 的 WebSphere 等商业实现,但因价格昂贵,一般仅应用于大型组织机构 。
- 2006年: RabbitMQ 开发始于 2006 年,由 Rabbit Technologies 开发并提供商业支持 。之所以取名为 "Rabbit",是因为兔子行动非常迅速且繁殖力极强,创始人们认为这个名字再合适不过 。
- 2010年4月: Rabbit Technologies 被 VMware 旗下的 SpringSource 收购 。
- 2013年5月: 被并入 Pivotal 公司(VMware 与 Pivotal 本质上一家,Pivotal 整合了 EMC 的某些资源,热门产品还包括 Spring 系列框架) 。
- 后续: 直到后来 Pivotal 将其开源,RabbitMQ 才逐渐走向大众 。