摘要: RocketMQ源码随笔-注册服务器 NamesrvStartup 该类用于启动注册服务器。其main方法委托了main0方法,该方法的执行逻辑如下: 调用方法NamesrvStartup#createNamesrvController创建一个NamesrvController实例,声明为contr 阅读全文
posted @ 2021-01-25 16:50 风火1989 阅读(188) 评论(0) 推荐(0) 编辑
摘要: RocketMq源码随笔-过期文件的删除 引言 RocketMQ中文件的存储是分为3个不同的部分: CommitLog,提交日志。所有主题、队列的消息数据都是直接写入这一文件。 ConsumeQueue,消费队列。按照主题和队列的方式进行区分,消费队列中写入定长20字节的消费条目信息,消费条目中指向 阅读全文
posted @ 2021-01-18 13:51 风火1989 阅读(573) 评论(0) 推荐(0) 编辑
摘要: RocketMq源码随笔-Broker的初始化 引言 Broker的初始化是Broker启动的第一个步骤。初始化的过程中会涉及到许多信息、配置的加载。日志、索引、消费队列信息的加载和恢复。 欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。 BrokerStartup Br 阅读全文
posted @ 2021-01-13 22:52 风火1989 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 索引文件与消费队列的创建 引言 Broker在将消息写入到提交日志后,写入线程的动作就结束了。而Broker后台会运行一个ReputMessageService线程。该线程会不断的检查提交日志的内容,如果发现了新增的消息数据,则读取消息的数据内容,组装为DispatchRequest对象,通过接口方 阅读全文
posted @ 2021-01-10 19:47 风火1989 阅读(427) 评论(0) 推荐(0) 编辑
摘要: EXSZBkdUOb 阅读全文
posted @ 2020-12-16 01:22 风火1989 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 局部变量保证线程安全 首先来看 这个类的 方法,如下 实际上,这的确是在执行代码逻辑的时候,一种可能的代码重排序变种。假定一开始 值为0,则 为 0 。在 判断的时候, 读取到了其他线程写入的值,因此没有执行计算逻辑,最终返回了 的值,也就是 0 。 阅读全文
posted @ 2020-04-16 20:22 风火1989 阅读(386) 评论(0) 推荐(0) 编辑
摘要: AQS源码详细解读 [TOC] 基础 在讲解AQS之前,有几个额外的知识需要了解。知道了这些,才能明白AQS框架中很多代码的道理。 + CAS相关知识 + 通过标识位进行线程挂起的并发编程范式 + MPSC队列的实现技巧 欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。 阅读全文
posted @ 2020-04-01 09:09 风火1989 阅读(1111) 评论(1) 推荐(0) 编辑
摘要: 理解 Java 内存模型的因果性约束 [TOC] 欢迎讨论 欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。 规范理解 这部分的内容比较抽象,首先是一开始的定义,如下 红色下划线的内容应该是理解的关键。首先,E 是一个特定的执行序列,其由指令集合 A 以及用于对集合 A 阅读全文
posted @ 2020-02-29 16:50 风火1989 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 高性能Java序列化框架Fse发布 [TOC] 使用场景 将Java对象序列化为二进制数据进行保存,以及二进制数据反向序列化为Java对象,在很多场景中都有应用。比如将对象序列化后离线存储至其他介质,或者存储于Redis这样的缓存之中。 目前常见的有几种框架可以支撑,比如 Hession ,Kryo 阅读全文
posted @ 2020-02-03 15:04 风火1989 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 心跳与超时:高并发高性能的时间轮超时器 [TOC] 引言 在许多业务场景中,我们都会碰到延迟任务,定时任务这种需求。特别的,在网络连接的场景中,常常会出现一些超时控制。由于服务端的连接数量很大,这些超时任务的数量往往也是很庞大的。实现对大量任务的超时管理并不是一个容易的事情。 本章我们将介绍几种用于 阅读全文
posted @ 2020-01-30 17:20 风火1989 阅读(1713) 评论(3) 推荐(0) 编辑