🍖 RocketMQ
2022年10月10日
- 中间件
🍖 RocketMQ
1. 组成
Producer
- 生产者
- 三种消息发送方式:
- 同步
- 消息发送出去后,需要等待服务器响应成功 | 失败,才能继续后面的操作
- 异步
- 消息发送出去后,可以继续后续操作,不用等待服务器响应,有回调函数
- 单向
- 消息发送出去后,可以继续后续操作,不需要等待服务器响应,无回调函数
- 同步
Consumer
- 消费者
- 两种消费模式:
- PUSH
- PULL
- 两种消费模式:
- 集群消费
- 一个队列中的消息只能被集群中的一个消费者消费
- 若某个消费者挂掉,组内其他消费者会接替它,然后继续消费
- 广播消费
- 一个队列中的消息被组内每个消费者消费
- 集群消费
NameServer
- 负责 源数据 的管理,包括对 Topic & 路由信息 的管理
- 每个 Broker 在启动时,均需向 NameServer 注册,
- 生产者发送消息前会根据 Topic 去 NameServer 获取对应的 Broker 路由信息
- 消费者也会定时获取 Topic 的路由信息
- NameServer 集群之间没有通信
Broker
- 负责 存储消息,转发消息
- 每个 Broker 与 所有 NameServer 节点保持 长连接 & 心跳机制
- Broker 定时将 Topic 信息注册到 NameServer,底层通信 & 连接基于 Netty 实现
MessageQueue
- 一个 Topic 下的消费可放置在多个 消息队列中,轮询该 Topic 下的所有消息队列然后选择一个消息队列放入
- 消息队列的引入使得消息的存储可以分布式集群化,提高了水平扩展能力
Topic
- 消息的第一级类型
- 每条消息必须有一个 Topic
- 每个 Topic 可以有 0 | 1 | 多个 生产者 & 消费者
Tag
- 消息的第二级类型,用于提供额外的灵活性
Group
- 一个组可以订阅多个 Topic
- 两种形式:
- 生产者组
- 消费者组
Offset
- 读取每个消息队列中的某条消息,需要知道其偏移量
- Long 类似数据结构