开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):NameServer 路由元数据】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12464
NameServer 路由元数据
内容介绍:
一、前言
一、路由元信息
一、前言
NameServer的主要作用是为消息的生产者和消息消费者提供关于主题Topic的路由信息,那么NameServer需要存储路由的基础信息,还要管理Broker节点,包括路由注册、路由删除等。
二、路由元信息
代码: RoutelnfoManager
private final HashMap<String/* topic */,List<QueueData>> topicQueueTable;
private fina7 HashMap<String/* brokerName */,Brokerbata> brokerAddrTable;
private fina1 HashMap<String/* clusterName*/, set<String/* brokerName */>> c1usterAddrTable;
private fina1 HashMap<String/* brokerAddr */,BrokerLiveInfo> brokerLiveTable;
private final HashMap<String/* brokerAddr*/,List<string>/* Filter server */> filterserverTable;
1、topicQueueTable: Topic消息队列路由信息,消息发送时根据路由表进行负载均衡
topicQueueTable示例数据:
topicQueueTable:{
"topic1":{
brokerName":"broker-a" ,
"readQueueNums":4,
"perm":6
,//读写权限,具体含义请参考PermName
"topicsynFlag" :() //topic
同步标记,具体含义请参考TopicsysFlag
},
{
"brokerName":"broker-b",
"readQueueNums":4,
"readQueueNums":4,
"perm" : 6
, //读写权限,具体含义请参考PermName
"topicsynFlag" :()
//topic同步标记,具体含义请参考TopicsysFlag
}
},
"topic other" : [ ]
}
Key是“topic1”,值是集合,集合中存的是每个broker的信息,包括broker的名字、权限信息等,我们发现这个示例中仅仅只有broker的name,broker的信息配置是在brokerAddrTable。
2、brokerAddrTable: Broker基础信息,包括brokerName、所属集群名称、主备Broker地址
brokerAddrTable : {
"broker-a" : {
"cluster: "c1",
"brokerName" : "broker-a" ,
"brokerAddrs" : {
0: ""192.168.56.1:10000"
1: ""192.168.56.2:10000"
}
},
broker-b" : {
"cluster" : "c1" ,
"brokerAddrs" :{
0 : "192.168.56.3:10000",1:"192.168.56.4 :10000"
}
}
从以上内容可以得到broker的地址
3、clusterAddrTable: Broker集群信息,存储集群中所有Broker名称
clusterAddrTable: {
“c1”: [{"broker-a", "broker-b"}]
}
“c1”集群名,{"broker-a", "broker-b"}集群当中每一个节点的名字
4、brokerLiveTable: Broker状态信息,NameServer每次收到心跳包是会替换该信息
brokerLiveTable示例数据:
brokerLiveTable : {
"192.168.56.1:10000": {
"lastUpdateTimestmp" :1518270318980,
"dataversion" : versionObl,
"channel" : channelobj,
"haserverAddr" : "192.168.56.2:10000"
}
"192.168.56.2:10000" : {
"lastUpdateTimestamp" :1518270318980,
"dataversion" : versionobl,
"channel" : channelobj,
"haserverAddr" : ""
包含属性:"192.168.56.1:10000"这个地址的broker上次上报的时间。在NameServer当中维护的是如上面内容的心跳路由表,NameServer每隔10s会扫描路由表,查看这个表中broker的lastupdatetimestamp是否有长时间未更新的状况,如果有一个broker长时间未更新,NameServer会将这个路由表中的这个broker删除,还会将其他相关路由中的信息删除。
5、filterServerTable: Broker上的FilterServer列表,用于类模式消息过滤。
注意:RocketMQ基于定于发布机制,一个Topic拥有多个消息队列,一个Broker为每一个主题创建4个读队列和4个写队列。多个Broker组成一个集群,集群由相同的多台Broker组成Master-Slave架构,brokerld为o代表Master,大于0为Slave。BrokerLivelnfo中的lastUpdateTimestamp存储上次收到Broker心跳包的时间。