RocketMQ系列-搭建Namesrv源码调试环境

在学习任何一个技术框架的时候,我们通常都是先了解是什么,有什么作用、解决什么问题、设计亮点和设计思想是什么;当然对于技术学习上来说,这只是纸上谈兵,一开始比较基础的学习,当我们想要深入的时候,我们必不可少的就是希望能够去调试源码,能够在本地运行一下这个技术框架,能够断点调试一下这个框架最核心的功能或者看一下内部的数据结构。所以我们学习一个技术框架,特别核心的一点就是,要在本地搭建我们的源码调试环境。

笔者在这里,就把RocketMQ的整个源码调试环境搭建的过程给梳理出来,不过因为笔者的开发环境是Windows的,所以以下所有内容都是基于Windows环境实践得出来的。

PS:笔者在这里说一下,可能对于不了解RocketMQ或者说是零基础的读者来说,会有一些很陌生的词汇,例如Namesrv,Broker之类的,也不用怕,因为这个RocketMQ系列的诞生,正是因为笔者完完全全体验到了学习RocketMQ的痛苦,不想对RocketMQ感兴趣想要深入研究的读者也体验一遍,所以才总结自己这次学习RocketMQ的方式,让读者能够完全从使用角度去了解,研究RocketMQ的功能以及深入源码,而不是一个模块一个模块的单体化了解。

Namesrv源码调试环境搭建

导入项目到IDEA

因为笔者用的IDEA开发工具,所以以下的教程演示都是基于IDEA的。

  • 克隆项目到本地

https://github.com/apache/rocketmq

读者需要先将RocketMQ的源码给下载到本地来。

在这里,笔者给各位读者一个建议,可以先将RocketMQ的源码从GitHub导入到码云,然后再克隆到本地来,最好创建一个新的分支来进行源码学习和写一定的注释

  • 导入项目到IDEA

按照maven的方式open RocketMQ目录,因为笔者已经open过了,所以不会出现maven的提示,如果读者的出现了,点击trust project即可,然后就等待下载对应的依赖即可

创建所需目录

我们使用任何一个中间件,都知道在部署启动的时候,肯定是会有存放配置文件的目录,还会有保存中间件本身产生对应日志和数据的目录,我们这里就是需要创建这样的目录。

  • 配置文件目录-conf

在RocketMQ源码根目录下创建存放配置文件的目录-conf

  • 创建数据目录-data

在RocketMQ源码根目录下创建存放RocketMQ本身存放数据的目录-data

  • 创建日志目录-logs

在RocketMQ源码根目录下创建存放RocketMQ运行日志的目录-logs

环境配置

  • 将Namesrv的日志配置拷贝到我们上面创建的conf目录下

读者可能会疑惑,我怎么知道Namesrv的日志配置是怎么样的,这些问题RocketMQ都已经给我们想好了,在RocketMQ源码目录下,有一个distribution的目录,下面有不同模式部署RocketMQ对应的配置文件,目前我们本地跑,暂时只需要使用外面最基础的配置文件就可

  • 配置环境变量

我们需要配置对应的环境变量,让RocketMQ启动的时候,把我们当前的源码目录作为根目录,这样它才能找到运行所需的配置文件在哪

ROCKETMQ_HOME=E:\study\source_code_learn\rocketmq

  • 修改${user.home}属性

读者可以打开刚才准备好的日志文件看一下,发现里面会有一堆${user.home}

我们想把RocketMQ运行产生的日志指定放在我们之前准备好的logs目录下的话,放任不管肯定是不行,当然读者也可以选择直接将${user.home}直接全量替换成我们日志目录的绝对路径,不过在这里,笔者喜欢用另一种方式,通过增加一句代码的方式来实现。

我们打开Namesrv的启动类,也就是org.apache.rocketmq.namesrv.NamesrvStartup。在里面加上一句代码

public static NamesrvController main0(String[] args) {

        try {
// 添加此行代码指定user.home
System.setProperty("user.home", "E:/study/source_code_learn/rocketmq");
NamesrvController controller = createNamesrvController(args);
start(controller);
String tip = "The Name Server boot success. serializeType=" + RemotingCommand.getSerializeTypeConfigInThisServer();
log.info(tip);
System.out.printf("%s%n", tip);
return controller;
} catch (Throwable e) {
e.printStackTrace();
System.exit(-1);
} return null;
}

启动Namesrv

到了最关键的时候,直接启动Namesrv

点击启动按钮,看到如下输出,还有如果有对应日志文件产生,那就是成功了

总结

通过上面一系列的操作,我们终于把我们的Namesrv给启动起来了,这样子我们就能够在我们本地去调试Namesrv启动的整个过程,可以看一下都进行了什么操作,内部使用了什么数据结构,保存了什么元数据。还是那句,想要深入研究任何一个技术框架,在自己本地搭建一个源码调试环境是必不可少的。

题外话

也许有不少读者会觉得这文章实在是太过于简单了,但是笔者是打算总结自己这次在学习RocketMQ当中遇到的所有痛点,然后按照一个使用者,结合深入学习的角度去一步步深入,才会打算将自己的整个学习过程给整理成一个系列,最后输出成文章,一是希望将自己的所学进行沉淀,二也是希望广大读者能够减少在学习RocketMQ当中的弯路

RocketMQ系列-搭建Namesrv源码调试环境的更多相关文章

  1. [原创]在Windows和Linux中搭建PostgreSQL源码调试环境

    张文升http://ode.cnblogs.comEmail:wensheng.zhang#foxmail.com 配图太多,完整pdf下载请点这里 本文使用Xming.Putty和VMWare几款工 ...

  2. 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一)

    1 前言 这是SpringBoot2.1源码分析专题的第一篇文章,主要讲如何来搭建我们的源码阅读调试环境.如果有经验的小伙伴们可以略过此篇文章. 2 环境安装要求 IntelliJ IDEA JDK1 ...

  3. 【深入浅出 Yarn 架构与实现】1-2 搭建 Hadoop 源码阅读环境

    本文将介绍如何使用 idea 搭建 Hadoop 源码阅读环境.(默认已安装好 Java.Maven 环境) 一.搭建源码阅读环境 一)idea 导入 hadoop 工程 从 github 上拉取代码 ...

  4. 在IDEA中搭建Java源码学习环境并上传到GitHub上

    打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...

  5. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

  6. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  7. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

  8. Mac搭建Hadoop源码阅读环境

    1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...

  9. 深入理解Tomcat系列之二:源码调试环境搭建(转)

    前言 最近对Tomcat的源码比较感兴趣,于是折腾了一番.要调试源码首先需要搭建环境,由于参考了几篇帖子发现都不怎么靠谱,最后还是折腾出来了,然而却花了足足一天的时间去搭建这个环境.发现都不是帖子的问 ...

  10. 15分钟搭建RocketMQ源码调试环境

    下载源码 下载源码,github页面选择(rocketmq-all-4.7.1)版本压缩包,https://github.com/apache/rocketmq/tags 导入IDEA 1. 使用ID ...

随机推荐

  1. 《Java基础——抽象与接口》

    Java基础--抽象与接口       一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...

  2. CAP 6.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 6.2 版本正式版,在这个版本中我们主要做了一些功能优化,以及针对目前已经发现的几个 BUG 进行了修复了. 那么,接下来我们具体看一下吧. 总览 可能有些人 ...

  3. 查看docker容器占用的内存

    # 获取容器ID docker ps => 3b7fa46d9d43 # 根据容器ID获取对应的进程 docker top 3b7fa46d9d43 => 179733 # 查看进程占用的 ...

  4. CentOS7 安装 Git 服务器

    1.安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum ...

  5. Node.js(六)连接MongoDB进行数据访问

    npm init -y(初始化项目) npm install mongodb --save(引入MongoDB) const { MongoClient } = require("mongo ...

  6. HDU2844 Coins(多重背包)

    多重背包就是每种物品有数量限制时求解最大价值. 如果一种物品数量和重量之积超过背包容量,可视为完全背包:其余情况通过二进制拆分,将几个数量的物品看成一个,转化为01背包求解. 按照这种思路代码是这样的 ...

  7. 第一个Spring Boot的MVC程序

    最近在学习Spring Boot,记录一下学习过程!!!! Spring Boot中的MVC:M(model模型),C(controller控制器),V(view视图) model:是Java的实体B ...

  8. C++运算符重载(简单易懂)

    转载:https://www.cnblogs.com/liuchenxu123/p/12538623.html 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型. 你 ...

  9. Linux中CentOS 7的安装及Linux常用命令

    1. 前言 什么是Linux Linux是一套免费使用和自由传播的操作系统.说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统. 为什么 ...

  10. 齐博X1-栏目的终极方法get_sort

    本节说明栏目的最终方法get_sort 我们之前讲的一系列fun函数调用栏目的方法都是基于get_sort这个公共方法而来 我们来看下这个函数的具体参数这个方法有四个参数: id:也就是栏目id,经常 ...