[TOC] #### 1. 前言 --- 前几讲我们一直在聊消息队列的概念,从这一讲开始,我们正式进入 RabbitMQ。 先别急着装环境、写代码,我们先搞清楚一个问题:RabbitMQ 里面到底有哪些东西,它们之间是什么关系 ? #### 2. 先看最简单的模型 --- 你已经知道了:生产者发消息,队列存消息,消费者取消息 ```plaintext 生产者 ---> 队列 ---> 消费者 ``` 但在 RabbitMQ 里,中间多了一个东西:Exchange(交换机),真实的流程是这样的: ```plaintext 生产者 ---> Exchange ---> Queue ---> 消费者 ``` 思考:为什么多了一层 ? #### 3. 为什么需要 Exchange --- 假设没有 Exchange,生产者直接往队列里发消息,系统只有一个队列的时候,没问题。 但如果有 10 个队列呢 ?生产者得知道:这条消息发给哪个队列,那条消息发给哪个队列。 如果以后再加几个队列,生产者的代码就得跟着改,生产者和队列绑死了,Exchange 的作用就是把它们解开。 生产者只需要把消息丢给 Exchange,告诉它:「这条消息是关于订单的」 Exchange 根据预设的规则,决定这条消息应该放到哪个队列,规则可以改,队列可以加,但生产者的代码不用动。 Exchange 就是消息的「分拣员」。 #### 4. 四个核心角色 --- RabbitMQ 的架构由四个角色组成: + Producer(生产者):发消息的程序,它只需要把消息交给 Exchange,不关心消息最终去了哪个队列 + Exchange(交换机):接收生产者发来的消息,根据规则把消息路由到一个或多个队列 + RabbitMQ 支持多种路由规则,后面会专门用一章来讲,现在只需要知道:Exchange 负责分拣 + Queue(队列):真正存放消息的地方,消息在这里等着,直到消费者来取 + 一个队列可以被多个消费者消费,消息会轮流分配 + Consumer(消费者):从队列里取消息、处理消息的程序 #### 5. 完整流转过程 --- 把四个角色串起来,一条消息的完整旅程是这样的: ```plaintext Producer 发消息给 Exchange ↓ Exchange 根据规则,把消息投递到对应的 Queue ↓ 消息暂存在 Queue 里 ↓ Consumer 从 Queue 里取消息并处理 ``` 一张图记住 RabbitMQ ```plaintext ┌──────────┐ ┌──────────────┐ ┌──────────┐ ┌──────────┐ │ Producer │ ---> │ Exchange │ ---> │ Queue │ ---> │ Consumer │ │ 生产者 │ │ 交换机 │ │ 队列 │ │ 消费者 │ └──────────┘ └──────────────┘ └──────────┘ └──────────┘ 发消息 分拣消息 存消息 取消息 ``` 记住这个链路:Producer → Exchange → Queue → Consumer,后面所有内容,都是围绕这四个角色展开的 Exchange 有哪些类型、Queue 有哪些配置、Consumer 怎么确认消息…… 这些细节后面会一个一个讲,现在只需要记住:RabbitMQ 就是这四个东西串起来的 #### 6. 本文小结 --- RabbitMQ 的架构由四个角色组成: | 角色 | 作用 | | --------- | -------- | | Producer | 发消息 | | Exchange | 分拣消息 | | Queue | 存消息 | | Consumer | 取消息 | 核心流程:Producer → Exchange → Queue → Consumer Exchange 是 RabbitMQ 和简单队列最大的区别,它的存在让生产者和队列解耦,系统更灵活、更好扩展 下一讲,我们用 Docker 把 RabbitMQ 装起来,亲手跑一遍