什么是RabbitMQ?
什么是RabbitMQ?
- 一、什么是RabbitMQ?
- 二、Rabbitmq 的使用场景?
- 三、RabbitMQ基本概念
- 四、RabbitMQ的工作模式
- 1. **简单队列模式(Simple Queue)**
- 2. **工作队列模式(Work Queue)**
- 3. **发布/订阅模式(Publish/Subscribe)**
- 4. **路由模式(Routing)**
- 5. **主题模式(Topics)**
- 6. **RPC模式(Remote Procedure Call)**
一、什么是RabbitMQ?
RabbitMQ是一个开源的消息代理(Message Broker)软件,实现了高级消息队列协议(AMQP)。它用于在分布式系统中存储、转发消息,支持异步通信,帮助解耦生产者和消费者,提高系统的可扩展性和可靠性。
二、Rabbitmq 的使用场景?
(1)服务间异步通信
(2)顺序消费
(3)定时任务
(4)请求削峰
三、RabbitMQ基本概念
Broker: 简单来说就是消息队列服务器实体
Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列
Queue: 消息队列载体,每个消息都会被投入到一个或多个队列
Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key: 路由关键字,exchange根据这个关键字进行消息投递
VHost: vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部 均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的 权限系统,
可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度, vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同 的 vhost 中)。
Producer: 消息生产者,就是投递消息的程序
Consumer: 消息消费者,就是接受消息的程序
Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个 channel代表一个会话任务
由Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的 唯一的线路。
四、RabbitMQ的工作模式
1. 简单队列模式(Simple Queue)
- 解释:这是最基本的模式。生产者直接将消息发送到队列,消费者从队列中接收消息。适用于一对一的简单通信场景,没有复杂的路由逻辑。
- 流程图描述:
- 生产者发送消息到队列。
- 队列存储消息。
- 消费者从队列拉取消息。
- 消息流:Producer → Queue → Consumer
- 示例:生产者发送一条日志消息,消费者接收并处理。
2. 工作队列模式(Work Queue)
- 解释:也称为任务队列模式。生产者发送消息到单一队列,多个消费者共享该队列,消息被分发到空闲消费者(轮询或公平分发)。适用于负载均衡场景,如处理耗时任务。
- 流程图描述:
- 生产者发送消息到队列。
- 队列存储消息。
- 多个消费者(如Consumer1、Consumer2)竞争消费消息。
- 消息流:Producer → Queue → {Consumer1, Consumer2, …}(分发机制)
- 示例:生产者发送多个任务消息,多个工作线程并行处理。
3. 发布/订阅模式(Publish/Subscribe)
- 解释:生产者将消息发送到交换器(fanout类型),交换器将消息广播到所有绑定的队列。每个队列有自己的消费者,实现一对多通信。适用于事件通知或广播场景。
- 流程图描述:
- 生产者发送消息到交换器(fanout)。
- 交换器广播消息到所有绑定的队列(如Queue1、Queue2)。
- 每个队列有自己的消费者接收消息。
- 消息流:Producer → Exchange (fanout) → Queue1 → Consumer1, Queue2 → Consumer2, …
- 示例:生产者发布新闻更新,多个订阅者接收相同消息。
4. 路由模式(Routing)
- 解释:使用direct交换器,生产者发送消息时指定路由键(routing key),交换器根据路由键将消息路由到匹配的队列。适用于需要精确路由的场景。
- 流程图描述:
- 生产者发送消息到交换器(direct),并指定路由键(如"error")。
- 交换器根据路由键匹配绑定键(binding key),将消息路由到对应队列。
- 队列绑定到交换器时指定绑定键。
- 消费者从队列接收消息。
- 消息流:Producer → Exchange (direct) → Queue(基于路由键匹配) → Consumer
- 示例:生产者发送不同日志级别(如"error"或"info")的消息,消费者只接收特定级别的消息。
5. 主题模式(Topics)
- 解释:使用topic交换器,支持通配符匹配路由键(如"*.error")。生产者发送消息时指定主题路由键,交换器根据模式匹配将消息路由到队列。适用于灵活的路由需求,如分类消息。
- 流程图描述:
- 生产者发送消息到交换器(topic),并指定主题路由键(如"system.error")。
- 交换器根据通配符模式(如"* .error")匹配绑定键,将消息路由到符合条件的队列。
- 队列绑定到交换器时指定绑定键模式。
- 消费者从队列接收消息。
- 消息流:Producer → Exchange (topic) → Queue(基于通配符匹配) → Consumer
- 示例:生产者发送主题消息(如"order.created"),消费者订阅特定模式(如"order.*")接收消息。
6. RPC模式(Remote Procedure Call)
- 解释:客户端(生产者)发送请求消息,并等待服务器(消费者)返回响应。使用回调队列和关联ID实现同步通信。适用于需要请求-响应交互的场景。
- 流程图描述:
- 客户端发送请求消息到队列,消息中包含关联ID和回调队列地址。
- 服务器从队列接收请求,处理任务。
- 服务器发送响应消息到回调队列,使用相同关联ID。
- 客户端从回调队列接收响应。
- 消息流:Client → Request Queue → Server → Callback Queue → Client(双向流)
- 示例:客户端发送计算请求,服务器处理并返回结果。