1. RocketMQ 整体架构
[TOC]
整体架构
RocketMQ
主要由四部分组成,NameServer
、Broker
、Producer
、Consumer
。其中NameServer
、Broker
是独立部署集群,而Producer
、Consumer
一般是以SDK的形式提供给业务方,嵌在业务集群内。另外还有一个FilterSrv
,可选择性使用,用于消费者自定义消息过滤。
NameServer
类似于服务治理框架里的注册中心。管理Broker
集群的注册信息并提供心跳来检测他们是否可用,持有关于broker集群和队列的全部路由信息;
Broker
负责消息的存储传递,客户端查询并保证高可用。此外,代理提供了灾难恢复、丰富的度量统计和警报机制。主要功能如下;
Remoting Module
:服务入口,接收来自客户端的请求并转发;Client Manager
:客户端管理,管理客户端(生产者/消费者)还有维护消费者主题订阅;Store Service
:信息存储和查询的api服务;HA Service
: 提供主从broker的数据同步;Index Service
:为消息建立索引提供消息快速查询。
Producer
支持分布式部署,支持多种负载均衡策略发送消息到Broker
集群。发送过程支持快速失败且低延迟。
Consumer
支持以推送(非真的拉取)、拉取模式消费消息,支持集群消费和消息广播。提供实时的消息订阅机制。
代码结构
模块说明
- rocket.common 公共逻辑模块:包括一些基本类和Util类;
- rocket.remoting 远程通讯模块:主要起通讯作用,上层每个组件使用其来做服务通讯,暴露服务与服务请求,使用json序列化协议;
- rocket.store 数据存储:主要用在Broker,存储和读取消息数据。以及主从复制和索引;
- rocket.broker 数据中转服务:实现broker逻辑,接收
Producer
发送信息请求并存储,接收Consumer
拉取信息请求并读取消息返回,并保存每个Queue
的消费位移; - rocket.namesrv 命名服务:维护服务路由信息,相当于注册中心。
- rocket.client 客户端:实现
Producer
、Consumer
逻辑。
接下来的章节中,我们先讲基础模块(remoting
、store
),再讲namesrv
和broker
。其后,通过生产消息和消费消息两个过程来讲解namesrv
、broker
、producer
、consumer
之间的协作。
最后再介绍下rocketMQ在 顺序消息、消息重复、事务消息上做的改进。
本文所讲解的RocketMQ的源码版本是 4.1.0-incubating-SNAPSHOT
。
本话题,将从以下方面来讲解RocketMQ
。
- 整体架构
- 每部分的作用
- 每部分的用到了存储
- 通信方式
- 启动过程
- Namesrv启动过程
- Broker启动过程
- Producer启动过程
- Consumer启动过程
- 消息拉取到消费的过程
- Producer发送消息的过程
- Broker接收消息并存储消息的过程
- Consumer拉取消息并消费的过程
- 消息的顺序性如何保证
- 事务消息
- 定时消息