RocketMQ源码
文章平均质量分 87
rocketmq源码学习笔记
小小少年_
这个作者很懒,什么都没留下…
展开
-
rocketmq源码-consumer负载均衡逻辑
这篇笔记主要记录consumer在启动过程中,负载均衡的逻辑,多个消费者组成一个消费者组,对于集群模式,同一个消费者组中的多个消费者共同消费一个topic下的所有消息,所以每个consumer可能会处理N个messageQueue,至于哪个consumer消费哪个messageQueue,是由负载均衡策略决定的。原创 2023-02-04 12:59:04 · 376 阅读 · 0 评论 -
rocketmq源码-consumerQueue和indexFile文件写入
在rocketmq的文件中,除了commitLog文件,还有两个重要的文件,分别是indexFile文件和consumerQueue文件,这篇笔记主要记录这两个文件的数据是怎么写进去的consumeQueue文件中对应topic下的一个queue,在consumeQueue文件中,存放了三部分数据:分别是当前消息在commitLog中的offset、以及消息的大小、tagCode信息。原创 2023-02-04 12:58:01 · 582 阅读 · 0 评论 -
rocketmq源码-consumer已消费offset更新逻辑
这篇博客,主要记录consumer已经消费的offset是如何更新的对于集群模式,offset是维护在broker中的;而广播模式,offset是存储在本地文件中(暂时没有验证具体存储的位置,是根据源码推测的)不管是pull模式,还是push模式,都需要维护consumer当前已经消费的offset更新offset的逻辑,大致是这样的:1.client从broker拉取消息2.然后client回调业务系统的消费者所注册的messageListener,对消息进行处理。原创 2022-12-20 13:48:45 · 904 阅读 · 0 评论 -
rocketmq源码-关于消费者push模式和pull模式的对比
按照网上大部分的说法,对于push模式是broker自己推送消息给consumer,如果这个推断成立,那broker设计我认为是有问题的,因为对于broker而言,我只是去存储消息的,我不关心你是push还是pull,我只需要提供接口,让client来查询消息就可以了,如果broker还需要关心consumer的模式,那系统就太耦合了;对于pull模式,是通过netty请求去broker拉取消息,拉取到消息之后,将消息存入到了内存中的一个队列中,存入到队里中之后,立即发起下次请求;原创 2022-12-16 08:34:36 · 1283 阅读 · 2 评论 -
rocketmq源码-broker处理consumer拉取消息请求
在前面consumer拉取消息的博客中,有说过,对于consumer,在拉取消息的时候,是需要指定code码的,在consumer去broker拉取消息的时候,指定的code码是:PULL_MESSAGE,所以这篇博客,我们简单看下broker在接收到netty请求之后,是如何处理的这里看起来,是比较简单明了的,就是根据当前请求中的offset和size,从commitLog中拉取消息数据,然后返回就可以了;原创 2022-12-15 18:49:59 · 614 阅读 · 0 评论 -
rocketmq源码-pull模式拉取消息、同步拉取消息
上一篇博客,记录的是push模式,异步发送netty请求拉取消息的代码,这篇博客主要记录consumer发送同步netty请求,去拉取消息的逻辑,但是对于同步发送请求,需要结合LitePullConsumer来看在Lite PullConsumer中有两种方式,分别是:subscribe和assign模式,这两种模式的区别,我的理解是:前者是mq帮我们进行负载均衡,后者我们可以按照自己的需求去进行负载均衡,给当前消费者分配messageQueue。原创 2022-12-15 18:47:07 · 1280 阅读 · 0 评论 -
rocketmq源码-consumer拉取消息(push模式)
在前面consumer启动的博客中,有说过,在启动过程中,有两个比较重要的逻辑,分别是负载均衡和拉取消息的service,这篇博客,主要记录拉取消息的service,因为前面的demo和这篇笔记中的demo,都是基于push模式来学习的,所以前面的笔记都是基于push模式的,但是最近看了下pull模式,和push模式的代码还是有点区别的,所以后面单独起一篇博客,记录pull模式的逻辑对于消费者有两种模式:pull和push但是在push模式中,又分为了顺序消费和并行消费。原创 2022-12-15 09:10:13 · 1111 阅读 · 1 评论 -
rocketmq源码-consumer启动
这篇笔记记录consumer启动的逻辑consumer主要是负责去broker中拉取消息,然后将拉取到的消息,交给消费者去处理consumer本质上也是一个netty客户端,所以,在启动的时候,和producer有很多相似的点,但是有1个区别点:1、producer的负载均衡是在真正去发送消息的时候,通过轮询的方式,选择其中的一个messageQueue;原创 2022-12-15 08:50:53 · 352 阅读 · 0 评论 -
rocketmq源码-broker接收消息
这篇笔记,主要记录producer在通过netty发送了请求之后,在broker这边是如何处理的消息的这里是broker的nettyServer端接收客户端发送消息的入口,不解释为什么会是这个类了。原创 2022-12-15 08:46:29 · 363 阅读 · 0 评论 -
rocketmq源码-producer发送消息
这篇笔记,记录producer发送消息的相关源码我们以最简单的demo为例i < 3;i ++) {try {}我们要看的是:producer.send()这个方法校验消息的合法性根据消息中的topic,找到对应的路由信息根据路由信息 以及轮询策略,找到要发送的messageQueue构建netty请求,发送到broker。原创 2022-12-14 08:47:07 · 227 阅读 · 0 评论 -
rocketmq源码-producer启动流程
创建、启动producer的逻辑,是写在业务系统中的,根据rocketmq源码中的demo,只需要这几行代码,就可以启动producer这几行代码的逻辑,也比较简单,就是创建一个producer对象,创建对象时,需要指定producerGroup’然后设置nameSrv地址;最后调用其start()方法即可所以,启动producer最为核心的代码,是在start()方法中在start()方法中,最重要的是mqClientFactory.start()方法。原创 2022-12-13 19:05:23 · 373 阅读 · 0 评论 -
rocketmq源码学习-broker启动
这篇笔记记录broker启动的源码学习broker主要完成一下几件事情:1.接收producer的发送请求,并对消息进行持久化、同步其他节点2.接收consumer读取消息星球3.定时向nameSrv注册心跳信息,保持连接在启动的时候,也是分了两个方法1、创建brokerController2、启动brokerController总结来看,broker在启动的时候启动nettyServer和nettyClient。原创 2022-12-13 09:49:13 · 1035 阅读 · 0 评论 -
rocketmq源码学习-nameServer
最近看了下rocketmq的源码,计划针对最近的学习,做一个笔记,先从nameServer启动的逻辑开始记录吧在rocketmq中,有四个关键的组件nameServerbrokerproducerconsumer这四个组件之间的关系是这样的nameSrv启动的源码比较简单,其实就干了两件事情1、初始化nettyServer服务端,用来接收客户端请求,这里的客户端,包括:producer、consumer、broker2、启动了一个定时任务,定时去扫描内存中不活跃的broker信息。原创 2022-12-13 09:44:54 · 473 阅读 · 0 评论 -
rocketmq延迟消息实现原理
这篇笔记主要记录延迟队列的实现原理原创 2022-05-27 08:50:50 · 2818 阅读 · 1 评论