首页 > 编程语言 >RocketMQ系列-搭建Namesrv源码调试环境

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

时间:2022-11-30 20:57:00浏览次数:69  
标签:源码 RocketMQ Namesrv 日志 目录 调试

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,日志,目录,调试
From: https://www.cnblogs.com/KingJack/p/16939694.html

相关文章

  • RocketMQ 的消费者类型详解与最佳实践
    作者:凌楚在RocketMQ5.0中,更加强调了客户端类型的概念,尤其是消费者类型。为了满足多样的RocketMQ中一共有三种不同的消费者类型,分别是PushConsumer、SimpleConsumer和......
  • RocketMQ 的消费者类型详解与最佳实践
    作者:凌楚在RocketMQ5.0中,更加强调了客户端类型的概念,尤其是消费者类型。为了满足多样的RocketMQ中一共有三种不同的消费者类型,分别是PushConsumer、SimpleConsumer......
  • MySQL源码编译安装
    MySQL源码编译安装Linux环境:CentOS7.6MySQL版本:MySQL5.7.37安装路径:/usr/local/mysql1.创建相关目录#创建用户useradd-s/sbin/nologinmysql#创建安装目录并......
  • 计算机视觉的常用测试数据集和源码
    以下是computervision:algorithmandapplication计算机视觉算法与应用这本书中附录里的关于计算机视觉的一些测试数据集和源码站点,整理了下,加了点中文注解。ComputerVision......
  • 搞清楚Spring事件机制后:Spring的源码看起来简单多了
    Spring框架已然是Javaeee开发领域的霸主,无论是使用SpringBoot还是SpringCloud,都离不开Spring框架。作为Java开发者,无论是面试求职还是日常开发,就必须得熟练掌握、运用Sprin......
  • php版学生成绩管理系统源码(文末有下载方式)
    大家好, 我是程序猿零壹。给大家分享一款学生成绩管理系统,该系统使用php+mysql开发,是一款用于管理课程信息、老师信息、学生信息及成绩的系统,包含最基础的增删改查,可以作......
  • ArrayList源码
    //属性//默认初始大小privatestaticfinalintDEFAULT_CAPACITY=10;//空数组用这个privatestaticfinalObject[]EMPTY_ELEMENTDATA={};//扩展数组时用来和EM......
  • vue2源码分析- 数据响应简单模拟
    工作中大部分项目使用vue2做,但一直局限于使用,终于有闲暇时间可以学习下源码,网上优秀的源码分析很多,此文章只是记录个人所学,有问题欢迎大家指出,欢迎讨论,互相学习。下面是我......
  • 基于SpringBoot+Layui的物业管理系统【完整项目源码】
    使用建议业务逻辑简略,需要细化业务,增加业务开发,如未交费提醒等技术架构数据库:MySQL8.X后端技术:SpringBoot2.3.0,MyBatisPlus数据连接池:Druid前端技术:La......
  • HashMap源码分析(一)
    之前有写到ArrayList的源码分析,欢迎大家点开我的头像查看对于HashMap这个类大家一定不陌生,想必多多少少用过或者了解过,今天我来和大家谈谈HashMap的源码,JDK为1.8继承Abs......