第一章:前言
保证消息至少被消费一次,不承诺消息不被多次消费。
topic的路由信息无须在集群之间保持强一致,追求的是最终的一致性,容忍分钟不一致。
文件组,组内单个文件大小是固定的,方便引入映射机制。所有主题的消息基于的是顺序的读写,引入消息队列文件ConsumeQueue和索引文件indexFile。
内存映射机制。
设计的目标:
消息储存:内存映射,所有主题的消息顺序存储在同一个文件。
ACK信号的丢失无法保证只消费一次,可能被消费多次。
第七点:重复消费产生的原因。
-----------------------------------------------------------------------------------------------------------------------------------
第二章:RocketMQ 路由中心NameServer
Broker消息服务器启动的时候向所有的NameServer注册的。
消息的生产者在发送消息的时候先从NameServer获取Broker服务器的地址列表。
NameServer和每个Broker保持长连接,每隔30S检查Broker是不是存活。宕机就在注册表删除。
底层是netty的注意这点。
NameServer到底有哪些信息:
topic是路由信息。
解释:
nameServer里面有路由和broker的信息。
tpoic消息队列的路由信息,消息发送根据路由表进行负载均衡。
一个Topic有多个消息队列。
一个Broker默认为每一个主题创建4个读队列和4个写队列。
路由的注册:
broker发送心跳包,nameServer进行扫描。
虽然路由表被移除了但是消费者和生产者扫描的话是由延迟的。
路由的删除:
路由的发现:
小结:
-----------------------------------------------------------------------------------------
第三章:消息发送:
消息的属性:tpoic body tag 多个key
---
生产者的启动流程,看下常用的方法:
消息的生产者,topic信息,这个应该是开启了没有主题的话就默认的创建主题:
发送可以指定消息队列发送的。
在message里面指定topic,发送消息可以指定发送的消息队列。
---
---
消息的发送流程:
第一步:消息长度验证
第二步:查找主题和路由的信息,选择消息队列:
遍历消息队列的信息:
一个topic可以对应多个broker。
默认的机制:
故障延时机制:
---
消息发送的具体的流程,消息的发送已经指定了消息队列指定了发送到哪个消息队列:
消息发送的步骤:
消息发送的种类:
同步发送
异步发送
单向发送
批量的消息发送:
批量消息发送是将同一主题的多条消息一起打包发送到服务端,
小结:
批量发送必须是同一主题下的多条消息。
-----------------------------------------------------------------------------------------------------------------
第四章:RockerMQ消息储存
储存的文件:Comitlog ConsumeQueue IndexFile文件。
消息文件:Comitlog,RockerMQ将所有主题的消息储存在同一个文件中。保证消息发送顺序读写文件。
消息队列文件:ConsumeQueue,每个主题有多个消息队列,每一个消息队列有一个消息队列文件,这个是十分重要的。
索引文:IndexFile,根据消息的属性从Commitlog检索消息。
消息存储的类的信息:
CommitLog文件:
注意什么是MappedFile就是commitlog文件夹下面的一个个文件。
消息存储到CommitLog是串行的,这个是必须的。
这个创建共享的内存区域就是为了内存映射使用的。
只是将MappedFile对应的内存映射到Buffer中。
步骤14是关于刷盘还是双写。
储存文件组织与内存映射:
分析下根据不同的维度查找MappwdFile。
1.
2.
3.
4.
commitLog文件:
ConsumeQueue文件:
查找消息的算法:
indexFile索引文件,消息订阅的索引文件。
不看具体的过程了。
--------------------------------------------------------------------------------
文件的刷盘机制:
内存映射。
同步刷盘。
异步刷盘。
过期文件的删除:看总结即可。
----------------------------------------------------------------------------------------------------------------------
小结:
-----------------------------------------------------------------------------------------
第五章:RocketMQ消息消费:
一个消费者组内可以包含多个消费者,每个消费者可以订阅多个主题。
消息的推模的实现是基于拉模的。再封装。
一个消息队列同时只允许被一个消费者消费。
mq的消息消费:https://www.cnblogs.com/chen--biao/p/10166585.html
消息的拉取:
集群模式一个消息只允许被一个消费者消费。消费者组内维护一个线程池。
部分核心属性:
DefaultMQPushConsumer的主要属性:
消费者的启动流程:
消息重试是以消费组为单位不是主题为单位的。
消息的拉取:
每一个消费组维护一个线程池来消费消息。
单线程的消息拉取。
消息拉取的基本流程:
消息的长轮询的机制分析:
broker会存消费者组所有消费者的信息的。
一个消息队列同时只能有一个消费者消费,一个消费者可以消费多个消息队列。
消息的消费过程:
---
---
---
重试的步骤:
---
消息进度管理:
消费进度是主题和消费者组为键保存的。
---
定时消息:
总结:
整个流程的概述:
消息过滤的机制:
消息的拉取:
解锁的流程:
broker的名字,和消息队列的列表。
消费队列锁的实现:
总结:
--------------------------------------------------------------------------------------------------------------
第七章:RocketMQ的主从同步。
读写分离: