搜索

pdf文档 消息中间件RocketMQ原理解析 - 斩秋

2.39 MB 57 页 0 下载 109 浏览 0 评论 0 收藏
语言 格式 评分
中文(简体)
.pdf
3
摘要
文档详细解析了RocketMQ的消息中间件原理,包括生产者、消费者的工作流程,消息的存储机制(consume queue和commitLog),通信层的实现(基于Netty),以及消息的长轮询拉取机制。文档还介绍了RocketMQ的消息顺序发送机制和消费进度的管理方式,并提供了相关的配置和实现细节。
AI总结
# 消息中间件 RocketMQ 原理解析总结 ## 1. Producer - **感知 Broker**:Producer 在发送消息时会根据 Topic 到 Namesrv 获取 Topic 发布信息(TopicPublishInfo),并定时更新 Topic 路由信息。 - **心跳机制**:Producer 定时向 Broker 发送心跳,保持长连接。 - **消息发送**:消息发送到 Master Broker,通过主从复制机制同步到 Slave Broker。 --- ## 2. Consumer - **拉模式消费**:RocketMQ 采用 Consumer 主动拉取消息的模式,区别于传统消息中间件的 Push 模式。 - **消费方式**: 1. **Push 方式**:默认方式,Consumer 通过长轮询拉取消息后回调 `MessageListener` 处理消息。 2. **Pull 方式**:由业务系统控制,定时拉取消息,适合特定场景。 - **启动流程**: - 注册 Consumer Group 和消息监听器。 - 初始化负载均衡、心跳任务、消费进度持久化等。 - 向 Namesrv 注册 Consumer,获取 Topic 路由信息。 - 启动拉消息服务(PullMessageService)和负载均衡服务(RebalanceService)。 --- ## 3. 长轮询机制 - **拉取消息流程**: 1. Consumer 向 Broker 发送 Pull 请求。 2. Broker 返回消息,Consumer 将消息加入消费队列(ProcessQueue)。 3. 消息被提交到消费服务(ConsumeMessageService)处理。 - **流量控制**:若消费队列消息量超过阀值,会延迟拉取消息。 - **消息处理**: - 反序列化消息。 - 过滤消息。 - 将消息按顺序加入消费队列。 --- ## 4. Remoting 通信层 - **基于 Netty**:RocketMQ 使用 Netty 4.0.21.Final 实现通信层,采用 `ResponseFuture` 模式处理同步和异步调用。 - **同步调用**:通过 `invokeSyncImpl` 构建 `ResponseFuture`,发送请求并监听响应。 - **异步调用**:通过 `invokeAsyncImpl` 实现非阻塞通信。 --- ## 5. 消息存储机制 - **CommitLog**:存储所有消息的物理文件,按顺序写入和读取。 - **ConsumeQueue**:逻辑队列,记录每条消息在 CommitLog 中的位置和大小。 - 每个 Topic 和 QueueId 对应一个 ConsumeQueue 文件。 - 文件格式:`[CommitLogOffset(8 Byte), Size(4 Byte), Message Tag Hashcode(8 Byte)]`。 - **消费进度**: - 按 Consumer Group 分组存储消费进度。 - 支持广播模式(本地文件存储)和集群模式(Broker 存储)。 --- ## 6. 顺序消息 - **实现方式**:通过将相同业务标识(如 orderId、userId)的消息发送到同一个 Queue。 - **规则**:根据 `messageQueueList.size()` 计算消息所属的 Queue。 - 示例:`messageQueueList[orderId % messageQueueList.size()]` 或 `messageQueueList[userId % messageQueueList.size()]`。 --- ## 总结 RocketMQ 通过Producer、Consumer、长轮询、通信层和存储机制实现了高效的消息传输和消费。其核心特点包括: - **拉模式**:Consumer 主动拉取消息,降低 Broker 压力。 - **高可用性**:通过 Master-Slave 复制和心跳机制保证消息可靠性。 - **灵活消费**:支持 Push 和 Pull 两种消费方式,满足不同业务需求。 - **高效存储**:CommitLog 和 ConsumeQueue 结合,实现消息的高效读写和定位。 更多详细信息可参考 RocketMQ 官方文档:[https://github.com/alibaba/RocketMQ](https://github.com/alibaba/RocketMQ)。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 45 页请下载阅读 -
文档评分
请文明评论,理性发言.