0%

RocketMQ源码随笔-注册服务器

[TOC]

NamesrvStartup

该类用于启动注册服务器。其main方法委托了main0方法,该方法的执行逻辑如下:

  1. 调用方法NamesrvStartup#createNamesrvController创建一个NamesrvController实例,声明为controller
  2. 调用方法NamesrvStartup#start将这个controller启动。

那么下面就分别来看下两个方法的具体内容。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

RocketMq源码随笔-过期文件的删除

引言

RocketMQ中文件的存储是分为3个不同的部分:

  • CommitLog,提交日志。所有主题、队列的消息数据都是直接写入这一文件。
  • ConsumeQueue,消费队列。按照主题和队列的方式进行区分,消费队列中写入定长20字节的消费条目信息,消费条目中指向了该信息对应在提交日志中的偏移量。
  • IndexFile,索引文件。索引文件中写入定长20字节的索引信息,索引信息中指向了消息在提交日志中的偏移量。

RocketMQ不会无限制的将消息存储下去,而是采取一定的策略清除过期文件或者在磁盘不足的时候触发文件的删除,或者是手动的方式触发文件的删除。

在启动一个Broker的时候,会调用BrokerControllerstart方法,而这个start方法中也会调用到DefaultMessageStore#start方法。这个方法在最后会启动一个默认间隔为10秒的周期任务,这个周期任务中会调用CleanCommitLogService#runCleanConsumeQueueService#run两个方法,实现提交日志、消费队列、索引文件的过期删除。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

RocketMq源码随笔-Broker的初始化

[TOC]

引言

Broker的初始化是Broker启动的第一个步骤。初始化的过程中会涉及到许多信息、配置的加载。日志、索引、消费队列信息的加载和恢复。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

RocketMq源码随笔-索引文件与消费队列的创建

[TOC]

引言

Broker在将消息写入到提交日志后,写入线程的动作就结束了。而Broker后台会运行一个ReputMessageService线程。该线程会不断的检查提交日志的内容,如果发现了新增的消息数据,则读取消息的数据内容,组装为DispatchRequest对象,通过接口方法CommitLogDispatcher#dispatch实现该消息的分发处理。

消息的分发处理,通过对该接口的不同实现来进行。不同的实现对应创建不同的内容。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

RocketMq源码随笔-刷盘

[TOC]

引言

在rocketmq中有两种刷盘模式:同步刷盘和异步刷盘。

从类图上来看,有三个不同的实现思路。那下面逐一来看过。

适用情况如下

  • 同步刷盘使用GroupCommitService。
  • 异步刷盘且未开启TransientStorePool,使用FlushRealTimeService。
  • 异步刷盘且开启TransientStorePool,使用CommitRealService。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

RocketMq源码随笔-高可用HA

[TOC]

引言

RocketMq在部署的时候对高可用的考虑有两种模式:一种是消息数据的复制,一种是基于选择的主节点确定(PS:2021-1-10尚未确定,这部分代码未看)。

下文是对复制模式的代码随笔解读。

欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。

阅读全文 »

Sentinel 框架阅读报告(总体设计)

[TOC]

总体情况

  • 框架源码理解难度:5 分(满分为 10 分,分数越高代表理解难度越难)。
  • 核心部分参考理解时间: 24H。该部分时间仅针对 core 部分,因为 Sentinel 还有需要扩展包,都是适配不同的框架的。这部分实际上和 Sentinel 无关了。除此之外,Sentinel 也还包含 DashBoard 部分,这部分仅做展示,也与核心逻辑无关。因此,参考来说,通过 24H 的阅读时间,可以上手和理解 Sentinel 框架。

欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。

阅读全文 »

AQS源码详细解读

[TOC]

基础

在讲解AQS之前,有几个额外的知识需要了解。知道了这些,才能明白AQS框架中很多代码的道理。

  • CAS相关知识
  • 通过标识位进行线程挂起的并发编程范式
  • MPSC队列的实现技巧

欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。

阅读全文 »

理解 Java 内存模型的因果性约束

[TOC]

欢迎讨论

欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。

规范理解

这部分的内容比较抽象,首先是一开始的定义,如下

阅读全文 »