源码环境调试|学习笔记

本文涉及的产品
日志服务 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版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
若依框架 --- echarts 封装
若依框架 --- echarts 封装
597 0
|
NoSQL 数据可视化 JavaScript
搭建easy-mock数据模拟服务器
搭建easy-mock数据模拟服务器
搭建easy-mock数据模拟服务器
|
存储 缓存 JavaScript
请描述一种JavaScript内存泄漏的情况,并说明如何避免这种情况的发生。
JavaScript内存泄漏常由闭包引起,导致无用对象滞留内存,影响性能。例如,当一个函数返回访问大型对象的闭包,即使函数执行完,对象仍被闭包引用,无法被垃圾回收。防止泄漏需及时解除引用,注意事件监听器清理,使用WeakMap或WeakSet,定期清理缓存,以及利用性能分析工具检测。
75 2
|
5月前
|
存储 人工智能 自然语言处理
通义灵码 vs. GitHub Copilot:中国AI编码工具的破局之道
全球AI编码工具形成“双极格局”,GitHub Copilot凭借先发优势主导市场,而通义灵码通过差异化路径突围。技术层面,通义灵码在中文语境理解、云原生绑定上展现优势;生态方面,Copilot依托GitHub开源生态,通义灵码则深耕阿里云企业协同场景;开发者心智战中,通义灵码以数据合规、本土化服务及定制化能力取胜。这场较量不仅是技术的比拼,更是生态逻辑与开发者需求的全面博弈,彰显中国AI编码工具“换道超车”的潜力。
669 19
|
计算机视觉 C++
Mac系统下vscode调试opencv环境搭建
Mac系统下vscode调试opencv环境搭建
277 1
|
11月前
|
数据可视化 搜索推荐 数据挖掘
帆软BI怎么制作不等宽柱状图
帆软BI怎么制作不等宽柱状图
135 0
帆软BI怎么制作不等宽柱状图
|
负载均衡 监控 API
探索微服务架构中的API网关模式
随着微服务架构在软件开发领域的兴起,API网关作为系统的关键组件之一,承担着请求路由、负载均衡、认证授权等重要职责。本文将深入探讨API网关的设计原则、实现技术及其在微服务架构中的作用,旨在为读者提供一套完整的理解和实践API网关的框架。 【7月更文挑战第21天】
100 0
|
XML 数据格式
导航节点的关系
这段代码演示了如何遍历XML文档中的节点关系。通过`loadXMLDoc()`加载"books.xml",然后获取第一个`<book>`元素的子节点。使用`for`循环遍历这些子节点,检查每个节点是否为元素节点(类型为1)。如果是,就输出节点名称。循环通过`nextSibling`遍历所有同级节点。
|
监控
Zabbix实战之客户端自动发现
Zabbix实战之客户端自动发现
308 0