![](https://img-blog.csdnimg.cn/direct/c6e3d7a37582448fa3920c0116ea7a28.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
rocketmq源码解析
文章平均质量分 91
rocketmq源码解析,包括rocketmq的基本框架,nameserver架构设计与启动流程源码解析、生产者消息发送源码解析,消息存储、异步刷盘、消费源码解析,最后附上相关面试题,一站式帮你搞定rocketmq
专业的程序员
十五年开发经验,10年互联网老兵,曾担任旺旺集团核心开发课副课长兼架构师,在多家互联网企业中担任架构师、开发组长等职位。常年奋战在微服务、高并发、低代码一线,喜欢钻研技术,喜欢分享经验
展开
-
RocketMq源码解析十三:消息消费
PullMessageService负责对消息队列进行消息拉取,从远端服务器拉取消息后将消息存储ProcessQueue消息队列处理队列中然后调用ConsumeMessageservice#submitconsumeRequest方法进行消息消费,使用线程池来消费消息,确保了消息拉取与消息消费的解耦。ConsumeMessageService支持顺序消息和并发消息,核心类图如下:ConsumeMessageOrderlyService:顺序消费服务。原创 2024-07-24 10:17:51 · 10 阅读 · 0 评论 -
RocketMq源码解析十二:消息消费负载
RocketMQ消息队列重新分配是由RebalancService线程来实现,一个MQClientinstance持有一个RebalanceService的实现,并随着MQClientInstance的启动而启动。注意:消息队列的分配遵循一个消费者可以分配到多个队列,但同一个消息队列只会分配给一个消费者,如果消费者数量大于消息队列数量,则有些消费者无法消费消息。这里我们可以看到,实际上是针对每个topic进行了负载均衡 ,核心方法为this.rebalanceByTopic(topic, isOrder)原创 2024-07-18 11:44:26 · 70 阅读 · 0 评论 -
RocketMq源码解析十一:消息长轮询机制
RocketMO未真正实现消息推模式,而是消费者主动向消息服务器拉取消息,RocketMQ推模式是循环向消息服务端发起消息拉取请求,如果消息消费者向RocketMQ拉取消息时,消息未到达消费队列时,如果不启用长轮询机制,则会在服务端等待shortPolingTimeMils时间后(挂起)再去判断消息是否已经到达指定消息队列,如果消息仍未到达则提示拉取消息客户端PULL-NOT-FOUND(消息不存在);原创 2024-07-08 10:17:26 · 82 阅读 · 0 评论 -
RocketMq源码解析十:消息消费
消息消费以组的模式开展,一个消费组内可以包含多个消费者,每一个消费者组可订阅多个主题,消费组之间有集群模式和广播模式两种消费模式。集群模式,主题下的同一条消息只允许被其中一个消费者消费。广播模式,主题下的同一条消息,将被集群内的所有消费者消费一次。消息服务器与消费者之间的消息传递也有两种模式:推模式、拉模式。所谓的拉模式,是消费端主动拉起拉消息请求,而推模式是消息达到消息服务器后,推送给消息消费者。。原创 2024-07-01 14:17:36 · 93 阅读 · 0 评论 -
RocketMq源码解析九:刷盘机制及过期文件删除
刷盘策略在不同时间进行刷写磁盘。RocketMQ的存储是基于JDK NIO的内存映射机制(MappedByteBuffer)的,消息存储首先将消息追加到内存,再根据配置的刷写磁盘消息追加到内存后,立即将数据刷写到文件系统中。代码的调用链如下:我们一起来看下同步刷盘和异步刷盘的逻辑。原创 2024-06-28 16:08:06 · 50 阅读 · 0 评论 -
RocketMq源码解析八:实时更新消息消费队列与索引文件
消息消费队文件、消息属性索引文件都是基于CommitLog文件构建的,当消息生产者提交的消息存储在CommitLog文件中,ConsumerQueue、indexFile需要及时更新,否则消息无法及时被消费,根据消息属性查找消息也会出现较大延迟。RocketMQ通过开启一个线程ReputMessageservice来准实时转发Commitlog文件更新事件,相应的任务处理器根据转发的消息及时更新ConsumerQueue、indexFile文件。原创 2024-06-19 09:50:27 · 44 阅读 · 0 评论 -
RocketMq源码解析六:消息存储
我们针对源码来看下消息存储的流程,这里主要说明内存写入的过程,刷盘的机制在后面再讲。原创 2024-06-10 22:01:53 · 103 阅读 · 0 评论 -
RocketMq源码解析七:消息存储文件映射
RocketMQ通过使用内存映射文件提高!0访问性能,无论是CommitLog、ConsumerQueue还是IndexFile,单个文件都被设计为固定长度,如果一个文件写满以后再创建一个新文件,文件名就为该文件第一条消息对应的全局物理偏移量。我们看下一个commitLog文件大小是1GB一个comsumerQueue文件大小是5.72MB一个indexFile文件大小是 400MB。原创 2024-06-05 17:25:17 · 32 阅读 · 0 评论 -
RocketMq源码解析五:生产者Producer发送消息
消息发送的过程可以分成四步,分别是验证消息、查找路由、选择队列、发送消息验证消息:检查msg、检查topic、检查body;查找路由:先查本地缓存,如果为空从namesrv中获取并更新;选择队列:使用index+1再取模的方式进行负载均衡选择队列;发送消息:最终通过NettyRemotingClient发送请求。原创 2024-06-05 17:24:38 · 143 阅读 · 0 评论 -
RocketMq源码解析四:生产者Producer启动
生产者服务核心接口和类的关系如下图所示:MQProducer是生产者解耦,这里找几个有代表性的方法// 同步发送消息// 同步超时发送消息 如果超过了timeout的时间就抛出异常//异步发送消息// 异步超时发送消息 如果超过了timeout的时间就抛出异常// 指定消息队列同步发送消息。原创 2024-05-27 09:50:39 · 49 阅读 · 0 评论 -
RocketMq源码解析三:路由管理
Nameserver的主要作用是为消息的生产者和消息消费者提供关于主题Topic的路由信息,那么Nameserver需要存储路由的基础信息,还要管理Broker节点,包括路由注册、路由删除等。原创 2024-05-27 09:48:38 · 157 阅读 · 0 评论 -
RocketMq源码解析二:NameService篇(启动流程)
首先来看一章总体的技术架构图消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer)订阅该兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者(Push模式)或者消费者主动向消息服务器拉去(Pu模式),从而实现消息生产者与消息消费者解耦。为了避免消息服务器的单点故障导致的整个系统瘫痪,通常会部署多台消息服务器共同承担消息的存储。那消息生产者如何知道消息要发送到哪台消息服务器呢?原创 2024-05-21 15:49:33 · 196 阅读 · 0 评论 -
RocketMq源码解析一:源码结构介绍
从本章开始我们对Rocketmq的源码进行解析。使用版本是4.9.8。原创 2024-05-21 15:48:42 · 135 阅读 · 0 评论