第二章 核心概念与架构 v1.0
第一部分 核心架构
一、整体架构
RocketMQ由四个部分组成:NameServer、Broker、Producer、Consumer。
1.NameServer
NameServer是RocketMQ的注册中心,负责管理Broker的路由信息。每个Broker启动时会向所有NameServer注册,Producer和Consumer从NameServer获取路由信息。
主要功能:
- Broker管理:接收Broker的注册和心跳
- 路由信息管理:维护Topic到Broker的映射关系
- 提供路由查询:Producer和Consumer查询路由信息
2.Broker
Broker是消息存储和转发的服务端,负责接收Producer发送的消息并存储,同时将消息投递给Consumer。
主要功能:
- 消息存储:将消息持久化到磁盘
- 消息转发:将消息投递给消费者
- 高可用:支持主从同步复制
3.Producer
Producer是消息的生产者,负责发送消息到Broker。
主要功能:
- 消息发送:支持同步、异步、单向发送
- 负载均衡:将消息发送到不同的Broker
- 故障转移:Broker故障时自动切换
4.Consumer
Consumer是消息的消费者,负责从Broker拉取或推送消息进行处理。
主要功能:
- 消息消费:拉取或接收消息进行处理
- 负载均衡:多个消费者分摊消息
- 消费重试:消费失败时自动重试
二、核心概念
1.Topic
消息的逻辑分类,Producer将消息发送到特定Topic,Consumer订阅Topic消费消息。
2.Tag
消息标签,用于对同一Topic下的消息进行细分。Consumer可以根据Tag过滤消息。
3.Queue
Topic的物理分区,每个Topic可以有多个Queue。Queue分布在不同的Broker上。
4.ConsumerGroup
消费者组,多个消费者组成一个消费者组。同一组内的消费者分摊消息,不同组独立消费。
5.Offset
消息在Queue中的位置,消费者通过Offset记录消费进度。
第二部分 消息模型
一、消息类型
1.普通消息(Normal)
最基本的消息类型,Producer发送消息到Topic,Consumer订阅Topic进行消费。
特点:
- 发送简单,性能高
- 不保证消息顺序
- 不支持事务
2.顺序消息(Ordered)
保证消息按照发送顺序进行消费。
实现方式:
- 全局顺序:Topic只有一个Queue,所有消息按顺序消费
- 分区顺序:相同业务Key的消息按顺序消费,不同Key并行处理
// 发送顺序消息
rocketMQTemplate.syncSendOrderly(topic, message, orderId);3.延时消息(Delayed)
消息发送后不会立即投递,而是等待指定时间后才投递给Consumer。
延时等级:
- 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
// 发送延时消息,延时3秒
rocketMQTemplate.syncSend(topic, message, 3000);4.事务消息(Transactional)
支持分布式事务,保证消息发送和本地事务的一致性。
实现流程:
- Producer发送半消息(Half Message)
- Broker存储半消息,对Consumer不可见
- Producer执行本地事务
- 根据本地事务结果提交或回滚半消息
- 如果超时未确认,Broker回查本地事务状态
二、消费模式
1.集群消费(Clustering)
同一ConsumerGroup内的消费者分摊消息,每条消息只会被一个消费者消费。
适用场景:大多数业务场景
2.广播消费(Broadcasting)
同一ConsumerGroup内的所有消费者都会收到每条消息。
适用场景:配置同步、日志广播
// 设置广播消费模式
consumer.setMessageModel(MessageModel.BROADCASTING);