开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):消息存储核心类介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12477
消息存储核心类介绍
消息存储它的源码主要是在store的模块当中。
这里面最重要的一个类是DefaultMessageStore,最核心的消息存储代码都在这里面。
在这个类当中有一些重要的属性:
1、第一个就是message store config,这是消息配置的一些属性,这些属性都在这个类当中。如下代码所示:
private final Messagestoreconfig messagestoreconfig;
//消息配置属性
2、commit log是文件存储的一个实现类。如下代码所示:
private fina1 Commitlog commitLog /commitLog
文件存储的实现类
3、还有一个就是消息队列缓存表,这里面就会按照topic对于整个的消费的队列进行维护。如下代码所示:
private finaT ConcurrentMap<string/topic/,ConcurrentMap<Integer/ queueId/ consumequeue>> C onsumequeue table;
/ /消息队列存储缓存表,按照消息主题分组
4、flashConsumerqueueservice就是一个服务类,它是服务的一个线程。这个线程主要的作用就是进行消息队列的文件的刷盘作用,flash就是用来刷盘的。如下代码所示:private final FlushConsuneQueueService flushConsumeQueueService
:消息队列文件隔盘线程
5、commitlogService也是一个服务类,这个服务类是用来清除commit log这个文件的。commit log里面存储了消息的所有信息,消息消费了之后里面的已经全部消费的文件就可以删除了。那么将来就可以通过这个服务去进行删除处理。如下代码所示:
private final cleancommitlogservice Cleancommitlogservice;
//清除Commitlog文件服务
6、CleanConsumerqueueService,同样的道理就是对于consumer queue的这个队列文件,通过这个服务类去删除。
如下代码所示:private finalCleanconsumeQueueservice cleanconsumequeueservice;
//清除consumerQueue队列文件服务
7、IndexService indexService就是负责维护索引文件对应的业务逻辑。如下代码所示:
private final Indexservice indexservice;
//索引实现类
8、Mapped File分配的服务,它也是一个服务类。
如下代码所示:private final A11ocateMappedFileservice allocateMappefileservice: /Mappedfile
分配任务
9、Commitlog消息分发,就是这个reputMessageService,当这个消息发到commit log之后会通过服务类对这个消息进行转发。转发到哪里?转发到 consumer queue和index service所有文件当中。如下代码所示:
private final ReputMessageservice reputMessage Service
;
//s omnitLog消息分发,根据CommitLog文件构建 consumerqueue. IndexFile文件
10、HAservice是做高可用机机制的一个服务类。如下代码所示:
Private final Haservice haservice
//存储HA机制
11、Schedulemessageservice是消息服务调度的一个线程:
如下代码所示:
PrivatefinalschedulemessageService schedulemessageservice
12、storeSratsService是消息存储服务。
如下代码所示:
Private final storestatesservice storestatsservice
//消息存储服务
13、Transientstorepool这里面的意思是在消息发送时进行刷盘,如果打开了一个堆外的内存,那么这个消息再去进行刷盘的时候,会将这个消息刷到堆外的内存空间当中去,这就是对外的内存。
如下代码所示:
Private final TransientstorePool transienstorePool;
//消息堆外内存缓存
14、下一个是Broker的状态管理器,就是Brokerstats Manager。
如下代码所示:
PrivatefinalBrokerStatesMessage brokerstatsManger;
//Broker状态管理器
15、message ArrivingListener是一个监听器,是消息拉取长轮询模式,消息到达的监听器。
如下代码所示:
PrivatefinalMessageArrivingListener messageArrivigListener;
//消息拉取长轮询模式消息达到监听器
16、下面这个brokerconfig就是broker的一个配置类。
如下代码所示:
Private final BrokerConfig brokerConfig;
//Broker配置类
17、store checkpoint 就是文件刷盘的一个检测点。如下代码所示:
Private storeCheckpoint storecheckpoint;
//文件刷盘监测点
18、dispatcherList就是commitlog的文件转发请求,这是一个链表。如下代码所示:
Privatefinal LinkedList<commitLogDispatcher>dispatcherList;
//commitLog文件转发需求
以上是一些重要的属性。