RabbitMQ 是中小型企业常用的消息中间件,也是互联网公司面试经常问到的技术点,如果你了解并熟悉 RabbitMQ 对于你的面试、实际工作都会有比较大的帮助;本文希望能让更多的开发人员快速了解 RabbitMQ 相关知识点,分享是一种信念,让我们一起努力。
1. 应用场景说明
2. 理论介绍
3. 重要特性
4. 消息模型
5. 下载安装 基于 Linux 命令
6. 基于 Spring Boot 访问核心 API 说明
7. 简单代码实例
8. 监控管理 Web UI 简单介绍
一、应用场景说明
首先我们以实际的用户下单支付场景为例,其业务主流程如下:
用户提交订单 —> 生成订单 —> 发消息(短信&微信推送)—> 支付 —> 回调通知订单支付成功
上面的流程我们可以拆分为两个模块:订单模块和支付模块。在订单模块中主流程为生成订单之前的过程,在支付模块中回调通知订单是用户支付完后,第三方支付渠道(比如微信)通知支付回调网关,支付回调网关调用订单模块的回调接口。
从上述分析我们知道:
- 发消息如果是同步发送,则会影响主流程业务,比如发送消息慢,则会影响订单服务的性能,考虑到发送消息的状态不是强一致的,所以我们采用异步发送机制。
- 订单模块和支付模块存在依赖关系,这样就会出现,订单模块的回调通知服务接口修改了,则支付模块的代码也会跟着修改,反之也是一样;还有如果订单服务网络超时等异常了则支付的回调通知网关也势必受到影响,所以我们想办法让其解耦。
而 MQ 正好满足两大特性 异步 + 解耦 ,其中 RabbitMQ 被企业广泛使用。
二、RabbitMQ 理论介绍
RabbitMQ(以下简称 RQ ) 是部署最广泛的开源的消息中间件,由 Erlang 语言开发。
在 RQ 中有几个比较重要的理论概念,我们先简单熟悉下。
1. AMQP
是一种消息传递协议,它要求客户端之间、及和消息中间件之间保持一致的消息进行通信。
2. Connections
访问连接,它是建立在可靠的 TCP 连接之上,比如当客户端断开连接时不立即关闭 TCP 连接。
3. Channels
信道,客户端之间消息通过信道传输,一个 Connection 共享多个信道,它的一个主要作用是避免客户端直接对 TCP 建立和关闭所消耗的系统资源代价,可以看出 RQ 从底层设计时就考虑了高性能的应用。
4. Exchanges
交换机,它指定消息发送到哪个队列;流程是生产者将消息发给Exchange, 然后 Exchange 通过不同的类型(主要包括 fanout 、direct、topic )发送到不同的队列。
5. Queues
队列,存储消息的具体位置。
6. Products
生产者,消息的发送者。
7. Consumers
消费者,它订阅注册到特定队列,队列将消息“推”给消费者进行消息处理。
三、重要特性
为了保证消息的可靠传输,