- NameServer作为rocketmq中重要的组件其主要有如下功能:
- 接受boker注册与解除注册
- 获取broker集群信息
- 根据topic查询其路由信息
- 查询所有的topic
- 删除topic
- 查询某集群下的所有topic
- 一些键值对设置,比如顺序消息相关设置
- 接受boker注册与解除注册
- broker注册时会携带如下信息
- 集群的名字
- 地址
- broker名字
- broker id: 0为master,非0为slave
- HA地址,即slave通过该地址可以从master同步数据
左上角的broker注册时携带的数据为,cluster-a,10.10.10.10,broker-a,0, HA地址(默认由当前broker地址+(当前broker监听的端口+1)组成) - 对于namerserver来说会将以上信息存储为以下几种对应关系
- cluster name与broker name对应关系,也称集群信息
- broker name与broker角色和地址对应关系,也称主备信息
- broker地址与连接的对应关系,主要根据注册时间移除无效的连接,默认每10秒扫描一次,2分钟没有更新则任务连接无效。
移除无效连接的同时,将以上所有对应关系全部更新一遍。
- cluster name与broker name对应关系,也称集群信息
- 如果当前注册的broker为slave,则查询其master的HA地址并返回
- broker注册时同时会携带自身的topic路由信息(topic需要提前创建,创建的时候会遍历所有的master broker,在其上创建topic及queue的信息)
- topic 名字
- 可读queue数量
- 可写queue数量
- 权限,可读|可写
- 对于nameserver来说会将topic的路由信息存储为以下关系:
- broker注册时会携带如下信息
- 根据topic查询其路由信息
- 根据topic查询到broker name,再从主备信息关系查询到地址,最终返回如下对应关系
- 根据topic查询到broker name,再从主备信息关系查询到地址,最终返回如下对应关系
- 删除topic,仅仅从nameserver的存储中移除掉,不涉及broker(broker上的删除介绍broker时再说)
- namerserver高可用,由于各个nameserver之间并无通信,故,一个namerserver挂了并不会影响其他namerserver,至于和broker,consumer,producer之间的高可用等介绍相关模块时再介绍