学习重点
- NameServer整体架构设计
- NameServer动态路由发现与剔除机制
一、NameServer架构设计
先看一下 RocketMQ 的物理部署图,NameServer 类似于一个注册中心,生产者、消费者、Broker 都需要直接与 NameServer 进行通信。
Broker 消息服务器在启动时向所有 NameServer 注册,消息生产者(Producer)在发送消息之前先从 NameServer 获取 Broker 服务器地址列表,然后根据负载算法从列表中选择一台消息服务器进行消息发送 NameServer 与每台 Broker 服务器保持长连接,并间隔 30s 检测 Broker 是否存活,如果检测到 Broker 从路由注册表中将其移除但是路由变化不会马上通知消息生产者,为什么要这样设计呢?这是为了降低 NameServer 实现的复杂,在消息发送端提供容错机制来保证消息发送的高可用性。
二、NameServer路由注册、剔除
路由元信息
- topicQueueTable: Topic 消息队列路由信息,消息发送时根据路由表进行负载均衡。
- bro