第一章:前言
保证消息至少被消费一次,不承诺消息不被多次消费。
topic的路由信息无序在集群之间保持强一致,追求的是最终的一致性,容忍分钟不一致。
文件组,组内单个文件大小是固定的,方便引入映射机制。引入消息队列文件ConsumeQueue和索引文件indexFile。
设计的目标:
消息储存:内存映射,所有主题的消息顺序存储在同一个文件。
第七点:重复消费产生的原因。
-----------------------------------------------------------------------------------------------------------------------------------
第二章:RocketMQ 路由中心NameServer
Broker消息服务器启动的时候向所有的NameServer注册的。
消息的生产者在发送消息的时候先从NameServer获取Broker服务器的地址列表。
NameServer和每个Broker保持长连接,每隔30S检查Broker是不是存活。宕机就在注册表删除。
NameServer到底有哪些信息:
解释:
一个Topic有多个消息队列。
一个Broker默认为每一个主题创建4个读队列和4个写队列。
路由的注册:
路由的删除:
路由的发现:
小结:
------------------------------------------------------------------------------------------------------------------------------------------------------------
第三章:消息发送:
消息的发送流程:
默认的机制:
故障延时机制:
消息发送:
批量的消息发送:
小结:
-----------------------------------------------------------------------------------------------------------------------------------------------------
RockerMQ消息储存
储存的文件:Comitlog ConsumeQueue IndexFile文件。
消息文件:Comitlog,RockerMQ将所有主题的消息储存在同一个文件中。保证消息发送顺序读写文件。
消息队列文件:ConsumeQueue,每个主题有多个消息队列,每一个消息队列有一个消息队列文件。
索引文:IndexFile,根据消息的属性从COmmitlog检索消息。
消息的发送流程:
CommitLog文件:
储存文件组织与内存映射:
RocketMQ的储存文件:
commitLog文件:
ConsumeQueue文件:
查找消息的算法:
indexFile索引文件:
更新消息消费队列与索引文件:
异常产生的同步:
------------------------------
文件的刷盘机制:
内存映射,同步刷盘,异步刷盘。
--------
小结:
----------------------------------------------------------------------------------------------------------------
RocketMQ消息消费:
消息的拉取:
定时消息:
消息的过滤:
顺序消息:
读写分离: