![](https://img-blog.csdnimg.cn/20201013181139659.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
RocketMQ源码专栏
文章平均质量分 87
就是肝源码
$码出未来
~~~
展开
-
RocketMQ源码解析之broker(向namesrv注册)
原创不易,转载请注明出处文章目录前言1.broker向namesrv注册2.namesrv处理注册请求3.broker定时向namesrv发送心跳总结前言之前我们介绍过namesrv在RocketMQ中充当着注册中心与元数据管理的角色,消息生产者发送消息的时候,需要定时的去namesrv上面拉取topic的有关信息,比如说某个topic有几个MessageQueue,每个MessageQueue在那个broker上面存储着,拿到这些数据之后,消息生产者就能根据某种规则,然后将消息发送到对应Mes.原创 2021-03-27 22:47:56 · 1135 阅读 · 2 评论 -
RocketMQ源码解析目录
原创不易,转载请注明出处前言到目前为止,RocketMQ源码解析博文已经发表了20+篇,初步打算是从两个纬度来解析RocketMQ的源码,分别是整体运行流程的源码解析,某些核心组件源码深度剖析。现在已经初步完成了RocketMQ核心链路,核心流程的源码剖析,从宏观上了解了RocketMQ的运作流程,这也是第一阶段的内容,后续的解析将以broker的核心组件展开,从微观上深度剖析各个组件的实现细节。1. 核心链路源码解析文章目录RocketMQ源码解析(搭建环境)RocketMQ源码解析之消息.原创 2020-12-13 23:19:53 · 3712 阅读 · 6 评论 -
RocketMQ源码解析之延迟消息实现原理
原创不易,转载请注明出处文章目录前言1.延时消息的demo2.实现的原理前言今天要谈论的话题其实非常轻松,但是我们有些业务场景是离不开它的,其实说到延迟消息,不知道大家有没有想到它的业务场景,我这里说几个,比如我们购物下单,然后多长时间没有付款就会取消,或者我们下单打车,多长时间没有调度到车订单取消,不知道大家怎样实现这些业务场景,比如说我一个线程,然后一直扫订单表,扫出过期的订单啥的,但是这种方式会有一个问题,那就是订单量大的时候会给数据库带来很大的压力,而且很low,这种场景我们完全可以交给.原创 2020-12-09 00:30:23 · 883 阅读 · 0 评论 -
RocketMQ源码解析之broker(FastFailure)
原创不易,转载请注明出处文章目录1.FastFailure1.1 FastFailure是啥1.2 什么时候会发生2.源码分析总结1.FastFailure1.1 FastFailure是啥FastFailure从字面意思上就能猜出来,其实就是快速失败,什么是快速失败呢,就是broker感觉自己不行(繁忙)的时候,接下来的一些请求就会直接返回失败,如果有用过dubbo的小伙伴,可能会知道dubbo服务提供者端有个快速失败机制,就是线程池满的时候,再来调用请求就会直接拒绝掉,为啥会有这个机制呢?.原创 2020-12-08 01:01:13 · 855 阅读 · 0 评论 -
RocketMQ源码解析之broker(pullMessage)
原创不易,转载请注明出处文章目录前言1.broker处理消费请求的流程2.源码解析总结前言我们在之前的消费者文章中介绍了消息消费者消费整体流程,包括rebalance,pullMessage,consumeMessage这个三个重要的步骤,其中pullMessage这个步骤处理拉取消息请求,然后从broker上面拉取请求,接下来我们就看下broker是怎样处理消费请求的,本文还是老套路,先介绍下broker 处理消费请求的整体流程,然后就是从源码角度触发,看看源码是怎样实现的。1.broker.原创 2020-12-07 21:05:42 · 745 阅读 · 0 评论 -
RocketMQ源码解析之broker(事务消息处理)
原创不易,转载请注明出处文章目录前言1.broker事务消息处理流程2.源码分析2.1 broker事务消息处理组件初始化2.2 接收事务消息2.3 提交事务或者是回滚事务2.4 定时检查本地事务执行结果总结前言我们在《RocketMQ源码解析之消息生产者(事务消息原理篇)》一文中介绍过RocketMQ事务消息的原理,但是主要是介绍的消息生产者使用事务消息最佳姿势以及事务消息设计思想,并没有对broker处理事务消息这块进行深入的解读,然后本文就是为了补上broker对事务消息处理这块的,主要是.原创 2020-12-06 01:15:38 · 715 阅读 · 0 评论 -
RocketMQ源码解析之消息消费者(consume Message)
原创不易,转载请注明出处文章目录前言1.消息流程介绍2.源码解析总结前言我们在《RocketMQ源码解析之消息消费者(pullMessage)》一文中介绍了消息消费者push模式拉取消息的流程,消息从broker拉取回来之后,将消息放入对应的ProcessQueue的treeMap中,接着就是提交消费请求了,本文主要是介绍下RocketMQ提供的2种消费模式(并发消费,顺序消费)的执行流程与源码剖析。1.消息流程介绍RocketMQ支持并发消费与顺序消费,这个采用顺序消费还是并发消费,是与你.原创 2020-12-03 01:23:32 · 3479 阅读 · 1 评论 -
RocketMQ源码解析之消息消费者(pullMessage)
原创不易,转载请注明出处文章目录前言1.pullMessage原理介绍2.pullMessage源码解析总结前言在《RocketMQ源码解析之消息消费者(rebalance)》一文中我们介绍了消息消费者push模式的一个rebalance的实现,关于这个rebalance 其实就是解决多个消息消费者实例怎么分配多个MessageQueue的问题,这边默认实现是平均分配的方式,当然RocketMQ还提供了很多种其他分配算法,分配完之后,要对新分配的MessageQueue创建对应ProcessQu.原创 2020-12-02 01:47:27 · 1286 阅读 · 0 评论 -
RocketMQ源码解析之消息消费者(rebalance)
原创不易,转载请注明出处文章目录前言1.rebalance原理介绍2.源码剖析总结前言从本文开始我们就进入消息消费者核心机制介绍了,其实消息消费就三大核心步骤,第一就是rebalance,第二就是拉取消息,第三就是消费,对消息消费中出现的异常做一些处理。在阅读本篇文章之前最好阅读一下《RocketMQ源码解析之消息消费者(发送心跳给broker)》这篇文章,这篇主要介绍了消息消费者向namesrv拉取topic路由信息与向broker 进行注册这两个功能,其实这个向broker注册是比较重要的,.原创 2020-12-01 12:40:21 · 1048 阅读 · 1 评论 -
RocketMQ源码解析之消息消费者(发送心跳给broker)
原创不易,转载请注明出处文章目录前言1. 关于路由信息的拉取2. 发送心跳到broker并锁定总结前言我们都知道RocketMQ的架构设计,broker 启动的时候,会向namesrv 注册一下,然后会将本地的一些信息告诉namesrv ,其中就有这个broker里面存储了哪些topic,然后哪些queue在这个broker上面,同时broker要隔一段时间向namesrv发送心跳,然后消息消费者,消息生产者 在发送消息,拉取消息的时候会向namesrv 拉取一下topic的路由信息,这个样子才.原创 2020-11-29 20:56:55 · 1348 阅读 · 5 评论 -
RocketMQ源码解析之消息消费者(启动流程)
原创不易,转载请注明出处文章目录前言1.写一个消息消费者2.源码分析2.1 创建DefaultMQPushConsumer 的流程2.2 启动流程分析总结前言RocketMQ支持pull与push两种模式,从字面上是拉模式与推模式,可能会误认为拉模式是消息消费者主动管broker 要消息,然后推模式是broker主动推消息给消息消费者,其实在RocketMQ中不是这个样子的,在RocketMQ中push模式本质上还是消息消费者管broker 要消息,本文主要先写一个push模式的消息消费者来感受.原创 2020-11-29 00:56:24 · 1000 阅读 · 0 评论 -
图解RocketMQ HA同步原理
当broker 启动的时候,会创建存储器,并初始化它存储器,在存储器中有个HA服务也会被创建并初始化在HA服务里有3个组件:AcceptSocketService组件,是个serverSocket,监听 broker 监听端口号+1 那个端口号,用来接受slave broker 连接请求的,创建与slave broker连接的作用。GroupTransferService 组件,就是个看看消息同步到slave没有HAClient组件,这个就是slave连接master 的客户端。这个时候我们原创 2020-11-27 11:37:51 · 777 阅读 · 0 评论 -
RocketMQ源码解析之broker文件清理
原创不易,转载请注明出处文章目录1. broker 清理文件介绍1.1 哪些文件需要清理1.2 RocketMQ文件清理的机制2.源码解析2.1 清理commitlog2.2 ConsumeQueue 与indexFile 清理总结1. broker 清理文件介绍1.1 哪些文件需要清理首先我们需要介绍下在RocketMQ中哪些文件需要清理,其实可以想一想,在RocketMQ中哪些文件是一直在往里面写入东西的,最容易想到的就是commitlog 了,因为在一个broker 进程中,所有的普通消.原创 2020-11-24 23:50:12 · 1195 阅读 · 1 评论 -
RocketMQ源码解析之namesrv(获取topic信息)
文章目录前言1. 回顾消息生产者向namesrv获取topic信息2. namesrv处理获取topic信息请求总结前言我们在《RocktMQ源码解析之namesrv启动流程》介绍namesrv的时候,说过消息生产者与消息消费者要向namesrv获取topic信息,不然的话消息消费者和消息生产者不知道要把消息发个哪个broker 或者是不知道找哪个broker 要消息进行消费,本文将介绍下namesrv是如何处理消息消费者或者消息生产者获取topic 请求的。1. 回顾消息生产者向namesrv获取原创 2020-11-20 21:59:38 · 1147 阅读 · 0 评论 -
RocketMQ源码解析之namesrv启动流程
文章目录前言1.关于nameserv的介绍2.nameserv启动源码解析总结前言1.关于nameserv的介绍2.nameserv启动源码解析总结原创 2020-11-18 23:59:37 · 755 阅读 · 2 评论 -
RocketMQ源码解析之broker消息存储流程(BuildIndex)
文章目录### 前言### 1.BuildIndex### 2. BuildIndex源码解析### 总结原创 2020-11-12 14:14:18 · 668 阅读 · 2 评论 -
RocketMQ源码解析之broker消息存储流程(Reput ConsumeQueue)
原创不易,转载请注明出处文章目录前言1. reput到consumeQueue工作流程介绍1.1 消息写入commitlog流程回顾1.2 consumeQueue流程介绍2.reput到consumeQueue源码解析总结前言我们在《RocktMQ源码解析之broker消息存储流程(最最最硬核一)》一文中介绍解析了broker接收到消息,然后写入到commitlog中,将写入结果返回给消息生产者这么一个过程,这个其实就是普通消息send到broker的一个过程了,到这,消息生产者就可以任务它这.原创 2020-11-08 19:53:03 · 925 阅读 · 3 评论 -
RocketMQ源码解析之broker消息存储流程(PutMessage)
原创不易,转载请注明出处文章目录前言1. 消息存储流程2. commitLog写入消息源码解析总结前言本文主要是解析下broker 的消息存储部分,看下broker是怎样存储消息的,比如说我消息生产者发送过来一个消息,然后broker 是怎样存储的,需要注意的是在RocketMQ集群架构中只有master角色的broker是可以接收消息生产者消息的,slave角色的broker只能是master同步给它,但是消息消费者是有机会从slave角色上面拉取消息的,这个是要看slave同步情况与mast.原创 2020-11-07 14:03:44 · 1713 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(顺序消息)
文章目录前言1. 关于全局有序与分区有序2. 我们应该怎样发送和消费3. 整个运作流程4. 生产者源码解析总结前言本篇主要是介绍下RocketMQ顺序消息的实现,包括全局有序与分区有序的介绍,我们想要使用它的顺序消息功能,那么我们消息生产者与消息消费者应该怎样子编程,以及从发送到消费整个运作流程。1. 关于全局有序与分区有序这里我摘官方文档上面的一段话:消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。顺序消费的原理原创 2020-11-01 23:50:08 · 688 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(事务消息源码篇)
文章目录1. 一张图回滚事务消息的原理1. 一张图回滚事务消息的原理(图片可能不太清楚,可以访问我画的原图:process on 地址 ,方便的话给点个赞!谢谢)这里文字再描述下这个流程,首先是我们生产者端先向broker发送事务消息,这个broker 收到事务消息之后,然后将这个消息存储到系统的一个topic里面就是RMQ_SYS_TRANS_HALF_TOPIC, 然后封装响应结果给消息发送者,需要注意的是这个一来一回 发送的是同步消息,然后 这个消息生产者收到sendResult,也就是收到这原创 2020-10-31 23:57:59 · 452 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(事务消息原理篇)
文章目录前言1. 怎样发送一个事务消息2. 原理解释3. 源码解析前言之前我们解析了RocketMQ消息生产者发送普通消息的流程,其实事务消息跟普通消息差不多,它也是使用了同步发送的方式,只不过它引入了一个half消息的概念,这东西对用户是透明的,如果单单是编程的话不需要过多的关心,接下来我先介绍下RocketMQ事务消息发送的一个编程模型,知道RocketMQ是怎样发送事务消息的,然后就是使用介绍它的实现原理,最后就是进行消息生产者端的源码解析,其实事务消息很多事情都是broker来做的,本篇提及到原原创 2020-10-31 14:32:49 · 834 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(异步发送)
1.前言我们在《RocketMQ源码解析之消息生产者(同步发送与单向发送)》一文中解析了RocketMQ生产者同步发送消息与单向发送消息,这个异步发送消息其实很多地方与同步发送一样,不过有一点是你在编程的时候需要提供SendCallback 对象,用来发送响应来的时候进行回调使用,我们知道同步发送是等待broker响应到来,然后将响应往上返回,这个异步调用就是响应来的时候,对你提供的回调对象进行调用,你这个回调对象可以写一些自己的逻辑等等。2.源码解析在源码解析之前我们要先看一下异步发送消息是怎样编程原创 2020-10-29 19:19:46 · 1404 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(容错)
我们在介绍生产者消息发送的时候原创 2020-10-29 23:31:05 · 733 阅读 · 8 评论 -
RocketMQ源码解析之消息生产者(同步发送与单向发送)
文章目录1. 概述2.源码分析2.1 同步发送2.2 单向发送2.3 异步发送1. 概述我们在之前关于RocketMQ生产者文章里面介绍了发送消息分为三种模式,分别是同步发送,异步发送和单向发送,这里简单的介绍下,单向发送,这个就是发送之后不用接收结果的,就是你发出去一个消息,然后就返回了,就算有结果返回也不会接收了,这是站在消息生产者的角度;同步发送的话,就是发出去一个消息,这个线程要等着它返回消息发送结果,然后你这个线程再根据这个消息发送结果再做一些业务操作等等;异步发送,这个就是在你发送消息之前要原创 2020-10-28 21:41:47 · 845 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(获取topic路由信息)
文章目录1.获取topic信息2.发送消息2.1 单向发送2.2 同步发送2.3 异步发送3.延迟容错1.获取topic信息在介绍获取topic之前这里要先介绍下我发送某个消息的时候指定的那个topic不存在(就是之前没有创建过)消息生产者是怎样处理的,默认的话如果topic不存在的话,消息生产者会先去nameserv拉下topic信息,要是还不存在的话,就获取一下默认topic的路由信息,这个默认topic是TBW102,发送消息就选择TBW102这个topic的broker发送,broker收到消息原创 2020-10-22 22:45:21 · 2129 阅读 · 0 评论 -
RocketMQ源码解析之消息生产者(启动流程)
文章目录1.消息生产者一些原理1.1 介绍本篇内容2.启动流程3.获取topic4.发送消息流程5.发送模式5.1 同步发送5.2异步发送5.3单向发送4.延时容错1.消息生产者一些原理在上篇《RocketMQ源码解析(搭建环境)》我们主要介绍了读源码的一些知识储备与源码环境搭建,在读源码的一些知识储备中介绍了一下RocketMQ的架构,我们知道RocketMQ 分为nameserv 与broker ,再就是客户端 也就是我们说的消息生产者与消息消费者。接下来我们分别来介绍下:nameserv :玩原创 2020-10-15 22:15:28 · 1729 阅读 · 0 评论 -
RocketMQ源码解析(搭建环境)
文章目录1.读源码前必备1.1 读源码的勇气与毅力1.2 关于MQ的理解1.3 RocketMQ架构2.环境搭建2.1从github上面拉项目2.2 导入到idea2.3 配置broker2.4 配置nameserv2.5 启动1.读源码前必备不管是读哪个开源项目的源码,在这之前我们都需要能够知道它是个什么东西,它都有哪些功能,还要熟练的使用它,最好知道它的一些实现原理,这样就能从源码中找到这些原理的影子。1.1 读源码的勇气与毅力dubbo应该是我第一个正式阅读源码的框架,我还清晰的记得,当时阅读原创 2020-10-12 23:02:20 · 2128 阅读 · 3 评论