消息中间件是大型架构的核心,下面我重点详解RocketMQ@mikechen
RocketMQ
RocketMQ ,是阿里巴巴开源的一款分布式消息中间件。

基于 Java 实现,定位为高吞吐、低延迟、可扩展且可靠的消息引擎。
它支持队列与发布/订阅模型、事务消息、定时/延迟消息、消息轨迹等特性。
适合用于大规模在线系统的数据解耦、异步处理和流量削峰填槽。
RocketMQ 架构
RocketMQ 的核心组件包括: Producer、Broker、Consumer 与 NameServer。
三者协同实现消息的生产、存储、路由与消费。
整体架构,如下图所示:

┌──────────────┐
│ NameServer │
└─────▲────▲────┘
│ │
┌──────┘ └──────┐
┌─────────────┐ ┌─────────────┐
│ Broker A │ │ Broker B │
└─────▲──┬────┘ └─────▲──┬────┘
│ │ │ │
│ │ │ │
┌──────┴──▼──────┐ ┌─────┴──▼──────┐
│ Producer │ │ Consumer │
│(生产者) │ │(消费者) │
└────────────────┘ └────────────────┘
Producer
消息生产者,负责向Broker发送消息。
发送方式包含同步、异步和单向发送,支持消息过滤表达式与事务消息。
Producer 可通过配置重试策略、发送超时等保障可靠投递。
Broker
消息中间件核心组件,负责存储和转发消息。
消息存储: 接收 Producer 发来的消息,并持久化到磁盘。
消息拉取: 接收 Consumer 的拉取请求,并将消息返回。
主从同步: 支持主从模式,确保高可用。
负载均衡: 管理 Topic 和 Queue,提供消息路由。
心跳机制: 定期向 NameServer 汇报自己的存活状态和 Topic 路由信息。
Consumer
消息消费者,订阅Topic并消费消息。支持集群或广播消费模式,保证消息的负载均衡和消费可靠性。
NameServer
NameServer 提供轻量级的服务发现与路由信息管理,维护 Broker 的元数据(如地址、队列信息)。
Producer 与 Consumer 启动时向 NameServer 获取路由表,之后可直接与 Broker 通信。
NameServer 无需集中存储,支持无状态水平扩展。
RocketMQ原理
RocketMQ工作流程,如下所示:

1️⃣ 启动阶段
-
Broker 启动 → 向所有 NameServer 注册 Topic 路由信息。
-
Producer/Consumer 启动 → 向 NameServer 请求 Topic 路由表。
2️⃣ 消息生产流程
-
Producer 从 NameServer 获取 Topic 的路由信息;
-
Producer 选择 Broker 队列(可带负载均衡策略);
-
发送消息到 Broker 并等待返回结果;
-
Broker 接收并写入 CommitLog(顺序写入磁盘);
-
Broker 返回 ACK 给 Producer。
3️⃣ 消息消费流程
-
Consumer 从 NameServer 获取 Topic 路由;
-
Consumer 根据消费组信息订阅 Topic;
-
从 Broker 拉取或接收消息;
-
消费成功后发送 ACK;
-
若失败,根据策略重试或进入死信队列。
RocketMQ 的典型使用场景

异步解耦:将耗时或非实时的业务(如邮件、短信、图片处理)从主流程异步化,提升系统吞吐与响应速度。
流量削峰填槽:在高并发场景下,通过消息队列缓冲突发流量,平滑下游服务压力,避免瞬时过载。
事务消息:在分布式事务场景下,通过 RocketMQ 的事务消息能力实现最终一致性或半事务处理,保证跨服务操作的一致性。
日志/事件驱动:用于事件流、审计日志或行为轨迹的可靠传递与异步处理,便于后续分析与处理。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》