(一)Broker的初始化
在初始化过程中,会调用 BrokerController 对象的 initialize 方法进行初始化工作,大致逻辑如下:
(1)加载 topics.json、 consumerOffset.json、 subscriptionGroup.json 文件,分别将各文件的数据存入 TopicConfigManager、 ConsumerOffsetManager、SubscriptionGroupManager 对象中;
下面给出示例
//加载topics.json
{
"dataVersion":{
"counter":2,
"timestatmp":1393729865073
},
"topicConfigTable":{
//根据 consumer 的 group 生成的重试 topic
"%RETRY% group_name":{
"perm":6,
"readQueueNums":1,
"topicFilterType":"SINGLE_TAG",
"topicName":"%RETRY% group_name",
"writeQueueNums":1
},
"TopicTest":{
"perm":6, // 100 读权限 , 10 写权限 6 是 110 读写权限
"readQueueNums":8,
"topicFilterType":"SINGLE_TAG",
"topicName":"TopicTest",
"writeQueueNums":8
}
}
}
//加载消费进度偏移量consumerOffset.json
{
"offsetTable":{
"%RETRY% group_name@ group_name":{
0:0 //重试队列消费进度为零
},
"TopicTest@ group_name":{
0:23,1:23,2:22,3:22,4:21,5:18,6:18,7:18
//分组名 group_name 消费 topic 为 TopicTest 的进度为:
// 队列 queue=0 消费进度 23
// 队列 queue=2 消费进度为 22 等等…
}
}
}
//加载消费者订阅关系
{
"dataVersion":{
"counter":1,
"timestatmp":1393641744664
},
" group_name":{
"brokerId":0, //0 代表这台 broker 机器为 master,若要设为 slave 值大于 0
"consumeBroadcastEnable":true,
"consumeEnable":true,
"consumeFromMinEnable":true,
"groupName":" group_name",
"retryMaxTimes":5,
"retryQueueNums":1,
"whichBrokerWhenConsumeSlowly":1
}
}
}
(2)初始化 DefaultMessageStore 对象,该对象是应用层访问存储层的访问类;
(3)调用 DefaultMessageStore.load 加载数据
3.1)调用 ScheduleMessageService.load 方法,初始化延迟级别列表
3.2)调用 CommitLog.load 方法,在此方法中调用 MapedFileQueue.load 法,将 HOME/store/commitlog目录下的