RocketMQ最全详解(图文全面总结)

消息中间件是大型架构的核心,下面我重点详解RocketMQ@mikechen

RocketMQ 

RocketMQ ,是阿里巴巴开源的一款分布式消息中间件。

RocketMQ最全详解(图文全面总结)

基于 Java 实现,定位为高吞吐、低延迟、可扩展且可靠的消息引擎。

它支持队列与发布/订阅模型、事务消息、定时/延迟消息、消息轨迹等特性。

适合用于大规模在线系统的数据解耦、异步处理和流量削峰填槽。

 

RocketMQ 架构

RocketMQ 的核心组件包括: Producer、Broker、Consumer 与 NameServer。

三者协同实现消息的生产、存储、路由与消费。

整体架构,如下图所示:

RocketMQ最全详解(图文全面总结)

          ┌──────────────┐
          │ 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工作流程,如下所示:

RocketMQ最全详解(图文全面总结)

1️⃣ 启动阶段

  1. Broker 启动 → 向所有 NameServer 注册 Topic 路由信息。

  2. Producer/Consumer 启动 → 向 NameServer 请求 Topic 路由表。

2️⃣ 消息生产流程

  1. Producer 从 NameServer 获取 Topic 的路由信息;

  2. Producer 选择 Broker 队列(可带负载均衡策略);

  3. 发送消息到 Broker 并等待返回结果;

  4. Broker 接收并写入 CommitLog(顺序写入磁盘);

  5. Broker 返回 ACK 给 Producer。

3️⃣ 消息消费流程

  1. Consumer 从 NameServer 获取 Topic 路由;

  2. Consumer 根据消费组信息订阅 Topic;

  3. 从 Broker 拉取或接收消息;

  4. 消费成功后发送 ACK;

  5. 若失败,根据策略重试或进入死信队列。

 

 

RocketMQ 的典型使用场景

RocketMQ最全详解(图文全面总结)

异步解耦:将耗时或非实时的业务(如邮件、短信、图片处理)从主流程异步化,提升系统吞吐与响应速度。

流量削峰填槽:在高并发场景下,通过消息队列缓冲突发流量,平滑下游服务压力,避免瞬时过载。

事务消息:在分布式事务场景下,通过 RocketMQ 的事务消息能力实现最终一致性或半事务处理,保证跨服务操作的一致性。

日志/事件驱动:用于事件流、审计日志或行为轨迹的可靠传递与异步处理,便于后续分析与处理。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧