1. RabbitMQ 实现原理及流程
RabbitMQ 是基于 AMQP(Advanced Message Queuing Protocol) 协议的消息队列,采用 Erlang 语言开发,适用于可靠性要求较高的场景。
1.1 核心组件
RabbitMQ 由以下几个核心组件组成:
- Producer(生产者): 负责发送消息到 RabbitMQ 服务器。
- Broker(消息代理): RabbitMQ 服务器,负责接收、存储和转发消息。
- Exchange(交换机): 负责根据路由规则将消息转发到不同的队列。
- Queue(队列): 存储消息,供消费者消费。
- Consumer(消费者): 监听队列并消费消息。
- Binding(绑定): 定义交换机与队列之间的绑定关系。
1.2 消息投递流程
RabbitMQ 的消息传递流程如下:
- 生产者(Producer) 发送消息到 Exchange(交换机)。
- Exchange 根据路由规则,将消息分发到不同的 Queue(队列):
- Direct(直连交换机): 精确匹配
Routing Key
,路由到特定队列。 - Fanout(扇出交换机): 广播消息到所有绑定的队列。
- Topic(主题交换机): 按模式匹配
Routing Key
,适用于订阅场景。 - Headers(头部交换机): 按消息头匹配。
- Direct(直连交换机): 精确匹配
- 队列(Queue) 持久化消息(可选),等待消费者消费。
- 消费者(Consumer) 从队列拉取(或接收推送的)消息,并进行处理。
- RabbitMQ 确认机制:
- 生产者确认(Publisher Confirm): RabbitMQ 服务器确认消息已投递到交换机。
- 消费者确认(ACK): 消费者成功处理后,向 RabbitMQ 发送
ACK
,RabbitMQ 删除该消息。
1.3 消息确认与持久化
为了保证消息的可靠性,RabbitMQ 提供:
- 持久化(Persistence): 将消息存储到磁盘,避免服务器宕机导致数据丢失。
- 事务(Transaction): 生产者可开启事务,确保消息可靠发送。
- ACK 机制: 确保消息正确消费,否则 RabbitMQ 会重新投递。