消息存储核心类介绍|学习笔记

简介: 快速学习消息存储核心类介绍

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)消息存储核心类介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12477


消息存储核心类介绍

 

消息存储它的源码主要是在store的模块当中。

image.png

这里面最重要的一个类是DefaultMessageStore,最核心的消息存储代码都在这里面。

image.png

在这个类当中有一些重要的属性:

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文件转发需求

以上是一些重要的属性。

相关文章
|
22天前
|
消息中间件 负载均衡 Java
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息消费长轮训机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息消费长轮训机制体系的原理分析
32 0
|
3天前
|
消息中间件 存储 安全
【消息队列开发】 实现ConsumerManager类——消费消息的核心逻辑
【消息队列开发】 实现ConsumerManager类——消费消息的核心逻辑
|
3天前
|
消息中间件 网络协议 Java
【消息队列开发】 实现BrokerServer类——本体服务器
【消息队列开发】 实现BrokerServer类——本体服务器
|
3天前
|
消息中间件 存储 测试技术
【消息队列开发】 实现MemoryDataCenterTests类——测试管理内存数据
【消息队列开发】 实现MemoryDataCenterTests类——测试管理内存数据
|
3天前
|
消息中间件 Java 数据库连接
【消息队列开发】 对核心类实现数据库管理
【消息队列开发】 对核心类实现数据库管理
|
22天前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
38 0
|
3天前
|
消息中间件 存储 前端开发
【消息队列开发】 创建核心类
【消息队列开发】 创建核心类
|
3天前
|
消息中间件 存储 安全
【消息队列开发】 实现MemoryDataCenter类——管理内存数据
【消息队列开发】 实现MemoryDataCenter类——管理内存数据
|
3天前
|
消息中间件 存储 Java
【消息队列开发】 实现DiskDataCenter类——管理所有硬盘上的数据
【消息队列开发】 实现DiskDataCenter类——管理所有硬盘上的数据
|
22天前
|
消息中间件 存储 负载均衡
kafka使用场景与设计原理
kafka使用场景与设计原理
50 0