源码环境调试|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习源码环境调试

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)源码环境调试】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12459


源码环境调试


调试

1、创建conf配置文件夹

从distribution拷贝broker.conf和1ogback_broker.xm1和1ogback_namesrv.xm1

image.png调试的意思是直接使用下载的源码,去实现消息的发送与消息的消费,再进行源码调试之前,首先需要在源码的根路径期间去创建一个文件夹,叫做 conf ,在这个文件夹里面去配置一些基本的配置文件,配置文件主要有三个,第一个是 broker 的 conf 和 broker 相关的一些配置,以及 broker ,还有namesrv. 日志的配置文件。image.png 

拷贝过来,把 conf 的配置文件目录创建出来,然后再去进行调试的时候,基本上是要去做四个事儿。

(1)image.png(2)首先第一步是启动 NameService,再次去启动 broker,然后去使用 rocket mq 的源码给提供的示例工程中发送消息,然后再去使用示例代码去消费消息,基本上会做这四件事。

(3)启动 NameServer

NameServer 启动首先进入到 NameServer 工程中,在里面会看到 NamesrvStartup 进到类中就有提供一个慢方法,是一个入口类。

image.pngpublic class Namesrvstartup{

private static InternalLogger loq;

private static Properties properties=null; private static CommandLine commandLine=null

public static void main(string[] args){

maine(args); H

public static NamesrvController maine(string[] args){

try {

NamesrvController controller=createNamesrvController(args); start(controller);

string tip ="The Name Server boot success. serializeType="+ RemotingCommand.

结果:

D:\develop\Java\jdk1.8.0_161\bin\java

please set the ROCKETMO HOME variable in vour environment to match the location of the RocketMo installation

Process finished with exit code -2

可以直接的去运行慢方法就可以,在运行方法之后发现是没有启动起来,报了一个错,告诉当前需要做一个 rocketmq 环境变量的配置。是因为需要找到当前源码的根路径,找根路径的目的是为了找里边刚才所配的配置文件,比如要输出日志信息,得要用到日志的配置文件。现在就配置一下环境变量,环境变量只是为了工程去用,可以在 idea 中去完成配置。

点击 Edit Configurations,有 Environment variables 可以配置环境变量,名称为 ROCKETMQ_HOME ,值为源码当前的路径,把路径复制过来。

image.png点击 OK ,再启动结果:

D:\develop Java\jdk1.8.0_161 bin\java

The Name Server bost success. serializeType=JSON

(4)启动成功

(5)启动 Broker

broker.conf配置文件内容

brokerclusterName = Defaultcluster

brokerName = broker-a brokerid=0

#namesrvAddr地址

namesrvaddr=127.0.0.1:9876

deletewhen=04

fileReservedtime =48

brokerRole =ASYNC MASTER

flushDiskType = ASYNC_FLUSH

autocreateTopicEnable=true

///配置首先是集群的名字,broker 的名称,broker ID,ID 0 代表的是当前的普通款是主节点,在调试源码的时候没有去搭建集群,是以单键的方式去调试,然后去指定一下 namesrv,注意现在 name srv 是不是在本机就启动去指定一下 namesrv 的端口号,IP地址,然后 deletewhen 意思是 broker 会在凌晨的四点做一些数据的清理工作,然后下边有 broker 的角色,还有刷盘的机制,还有自动创建主题,在测的时候主题如果在 broker 中没有,发送的时候会报错,所以把自动创建主题的配置配一下。

# 存储路径storePathRootDir=E:\\Rocketmq\\data\\rocketmq\\dataDir#commitLog路径storePathCommitLog=E:\\RocketMq\\data\\rocketmq\\dataDir\commitlog

#消息队列存储路径storePathConsumeQueue=E:\\RocketMq\data\rocketmq\dataDir\consumequeue

# 消息索引存储路径storePathIndex=E:\\RocketMQ\data\rocketmg\dataDirlindex#checkpoint文件路径storecheckpoint=E:\\RocketMq\\datalrocketmg\dataDirlcheckpoint

# abort文件存储路径

abortFi1e=E:\\RocketMq\\data\\rocketmg\\dataDirllabort

创建数据文件夹 dataDir

启动 BrokerStartup.配置 broker.conf 和 ROCKETMQ_HOME

主要是在配制 broker 数据存储的路径,路径都是在 E:RocketMQ date 根路径下去配,需要在这个地方进到目录,去制定一个目录去创建一个 data 的文件夹,刚好客户的配置是对应上的,然后会去产生 commitlog 路径、消息队列、索引文件还有 checkpoint 检查文件的路径以及临时文件夹的路径都会产生到目录下面,如果不配会升职到默认的路径下面。配置的目的是为了将来查看方便。

拿着配置把 broker 里面默认的配置全部都替换,替换完了之后去启动,进到 broker 项目中有 brokerStartup 里面也有一个main方法。

public class Brokerstartup {

public static Properties properties = null;

public static CommandLine commandLine=null

public static String configFile = null;

public static InternalLogger log;

public static void main(string[] args){

start(createBrokerController(args)):

public static BrokerController start(BrokerController controller) {

try {

controller.start();

结果:

D:\develop\Java\jdk1.8.0_161\bin\java .….

Please set the ROCKETMQ HOME variable in your environment to match the location of the RocketMQ installation Process finished with exit code-2

点击main方法,没有启动成功

image.png

配置broker 的根路径,配一下源码路径,然后 Apply ,配完之后就可以去启动。

配完了之后不能启动,broker 启动的时候要去加载配置文件,现在broker startup 不知道这个文件,需要要告诉它通过 _c 参数去配置一下配置文件的一个路径

image.png

再次启动结果:

D:develop Javajdk1.8.0_161 bin java ...

The broker[broker-a,192.168.199.181:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

启动成功

Rocketmq的服务端已经全部都启动好,可以去测试现在的环境可不可以进到里面,里面有一个example,找一下 example 一个示例工程,示例工程里有一个 quick start 快速入门,里有一个producer 和一个consumer,一个是消息生产者,一个是消息的消费者,消息生产者里有一个main方法,里边发送100条消息,直接用它去发送,消息发送出去了,返回来的是消息是发送的一个结果,

image.png

Consumer 可以去启动消费,是成功的去消费者,到这源码的调试工作基本上就完成了。

image.png 

2、总结

(1)启动 Name Server

最终的效果是实现了消息的发送以及消息的消费,经过了四个步骤,首先第一步是启动name server的时候,首先先去配了配置文件,Copy了三个配置文件,一个是 broker的配置文件,还有一个是broker 的日志配置文件,还有name server的日志文件,

image.png然后再启动name server的时候,配置了环境变量,环境变量是源码的根路径,

可以使用 namestartup 类完成 namesvr 的启动。

image.png(2)启动 broker

broker 的启动首先是配置了里面 broker 的参数信息,然后去创建了一个 date 文件夹,data文件夹里边可以产生一些数据文件的信息,将来 broker 所接收到消息就会存到里边去,进行了一个配置然后再启动 broker 的时候依然是需要配置 ROCKERMQ 的环境变量,在这个上面加载了 broker 配置文件,准备工作进行好之后可以启动,

image.png 

启动的类叫做 Broker Startup,

image.png里面有个main方法直接启动就可以,当两个启动之后,第三步做了消息的发送,消息发送在 producer 中,在 example 工程中提供的快速入门的生产者还有消,可以去发送一个消息消费看是否可以正常消费,如果可以正常消费说明源码调试工作没有问题。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
存储 编译器 程序员
【调试方法】基于vs环境下的实用调试技巧
【调试方法】基于vs环境下的实用调试技巧
|
6月前
|
Ubuntu Linux Go
搭建调试环境
搭建调试环境
82 0
|
6月前
|
NoSQL 编译器 开发工具
音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境
音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境
169 0
|
JavaScript 前端开发 数据可视化
自动调试自动编译五分钟上手
自动调试自动编译五分钟上手
40 0
|
前端开发 Java API
如何使用线上环境进行本地代码调试
如何使用线上环境进行本地代码调试
531 0
|
网络架构 开发者 ice
3.3基础概念:调试配置介绍|学习笔记
快速学习3.3基础概念:调试配置介绍
3.3基础概念:调试配置介绍|学习笔记
|
缓存 小程序 前端开发
小程序云开发和调试 | 学习笔记
快速学习小程序云开发和调试
小程序云开发和调试 | 学习笔记
|
Arthas 监控 IDE
《Arthas系列一》搭建调试环境,千里之行始于足下
《Arthas系列一》最简单的调试环境
377 0
《Arthas系列一》搭建调试环境,千里之行始于足下
|
存储 搜索推荐 Java
怎么阅读源码【调试观察源码】
怎么阅读源码【调试观察源码】
183 0
怎么阅读源码【调试观察源码】
|
XML IDE Java
阅读Spring源码第一步:源码编译与创建调试入口
 Spring开源框架经过很长时间的发展,各个模块均已成熟,一个常识就是一个可靠,可扩展的高性能框架,它的代码行数是相当可观的,我用static插件简略测算了一下,Spring的源码有100多万行,可以想象其中的调用逻辑是相当复杂的,所以将Spring源码下载到本地再编译的话,我们就可以通过IDE的debug来来到抽丝剥茧分析源码的目的,并且我们可以很方便的使用idea来查看调用栈,方法的调用关系也就比较明了了。
阅读Spring源码第一步:源码编译与创建调试入口