使用IDEA调试RocketMQ

目录

一、IDEA获取RocketMQ源码

二、IDEA调试RocketMQ源码

1、启动NameServer

2、启动Broker

3、使用RocketMQ提供的实例验证消息发送与消息消费

三、RocketMQ核心目录说明

四、参考


一、IDEA获取RocketMQ源码(RocketMQ版本4.6.1)

1、在IDEA 【VCS】菜单中选择【Check from Version Controll】,再选择【Git】:

2、URL输入RocketMQ源码地址,选择保存的本地路径:

3、点击【Clone】:状态栏有代码检出的进度

4、检出完成会弹出提示框,选择【Yes】:

5、在当前窗口打开工程,下载依赖包,依赖包下载完成后:

二、IDEA调试RocketMQ源码

本节将展示IDEA中启动NameServer、Broker,并运行消息发送与消息消费示例程序。

1、启动NameServer

1)展开namesrv模块,打开Run/Debug Configuration:

2)点击Environment Variables后面的按钮,弹出Environment Variables,点击“+”,在Name中输入ROCKETMQ_HOME,Value输入源码保存路径。点击OK,回到Debug Configuration界面,再点击OK。

3)在RocketMQ运行主目录中创建conf、logs、store三个文件夹:

4)从RocketMQ distribution部署目录中将broker.conf、logback_broker.xml文件复制到conf目录中:

5)logback_namesrv.xml文件,只需要修改日志文件目录:(例如下面这种)

注意:logback_broker.xml文件,也需要修改日志目录,否则broker.log会存储在默认目录

6)broker.conf文件内容如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# nameServer地址,分号分隔
namesrvAddr=127.0.0.1:9876
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 存储路径
storePathRootDir=F:\\rocketmq\\store
# commitLog 存储路径
storePathCommitLog=F:\\rocketmq\\store\\commitlog
# 消费队列存储路径
storePathConsumeQueue=F:\\rocketmq\\store\\consumequeue
# 消息索引存储路径
storePathIndex=F:\\rocketmq\\store\\index
# checkpoint 文件存储路径
storeCheckpoint=F:\\rocketmq\\store\\checkpoint
# abort 文件存储路径
abortFile=F:\\rocketmq\\store\\abort

7)Debug启动:

Connected to the target VM, address: '127.0.0.1:60542', transport: 'socket'
ch.qos.logback.core.joran.spi.JoranException: Could not open [F:\rocketmq\conf\logback_namesrv.xml].
//省略

8)找不到logback_namesrv.xml,把distribution下的logback_namesrv.xml拷贝到F:\rocketmq\conf下:

9)Debug运行NamesrvStartup:

NameServer启动成功!

2、启动Broker

1)打开broker模块,直接运行BrokerStartup:

2)提示要设置ROCKETMQ_HOME,现在配置Debug Configuration:

3)Debug运行BrokerStartup:

4)再去查看一下broker.log文件,看有没有报错:查看了所有log,没有错

注意:参考上面“5)logback_namesrv.xml文件,只需要修改日志文件目录”,去修改logback_broker.xml文件,才能在指定位置找到broker.log文件,不修改的话就是存到它的默认位置了。

3、使用RocketMQ提供的实例验证消息发送与消息消费

1)修改org.apache.rocketmq.example.quickstart.Producer示例程序,设置消息生产者NameServer地址

2)运行该示例程序,查看运行结果,如果输出如下则表示消息发送成功:

SendResult [sendStatus=SEND_OK, msgId=C0A80071000018B4AAC26F933ABE0000, offsetMsgId=C0A8DE0100002A9F0000000000000000, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=3], queueOffset=0]
//省略

3)修改org.apache.rocketmq.examples.quickstart.Consumer示例程序,设置消费者的NameServer地址:

4)运行消费者程序,如果输出如下表示消息消费成功:

Consumer Started.
ConsumeMessageThread_4 Receive New Messages: 
[MessageExt [queueId=3, storeSize=201, queueOffset=0, sysFlag=0,
bornTimestamp=1582358319807, bornHost=/192.168.222.1:53060, storeTimestamp=1582358319834,
storeHost=/192.168.222.1:10911, msgId=C0A8DE0100002A9F0000000000000000, commitLogOffset=0,
bodyCRC=613185359, reconsumeTimes=0, preparedTransactionOffset=0,
toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250,
CONSUME_START_TIME=1582358829840, UNIQ_KEY=C0A80071000018B4AAC26F933ABE0000,
CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 48], transactionId='null'}]]
// 省略 

5)消息发送与消息消费都成功,则说明RocketMQ调试环境已经成功搭建,可以通过Debug调试源码,探知RocketMQ的实现奥秘了。

三、RocketMQ核心目录说明

四、参考

《RocketMQ》技术内幕

### 如何在 IntelliJ IDEA使用 RocketMQ #### 配置环境 为了能够在 IntelliJ IDEA 中顺利集成并使用 RocketMQ,首先需要确保安装了必要的依赖项。可以通过 Maven 或 Gradle 来管理这些依赖关系。 对于 Maven 用户,在 `pom.xml` 文件中加入如下配置来引入 RocketMQ 的客户端库: ```xml <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.9.3</version> </dependency> ``` 而对于采用 Gradle 构建工具的项目,则应在 `build.gradle` 添加相应的依赖声明: ```groovy implementation 'org.apache.rocketmq:rocketmq-client:4.9.3' ``` 完成上述操作之后,记得同步构建文件以下载所需的 jar 包[^2]。 #### 开发应用 创建一个新的 Java 类作为消息生产者或消费者实例。这里给出一个简单的例子展示如何发送一条消息到指定的主题(topic)。假设已经有一个名为 "TestTopic" 的主题存在。 ```java import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; public class ProducerExample { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("example_producer_group"); producer.setNamesrvAddr("localhost:9876"); // 设置 NameServer 地址 producer.start(); Message msg = new Message( "TestTopic", // topic "TagA", // tag ("Hello RocketMQ").getBytes(RemoteBrokerProtocol.DEFAULT_CHARSET)); try { producer.send(msg); System.out.printf("Send message successfully%n"); } catch (Exception e) { e.printStackTrace(); } producer.shutdown(); } } ``` 同样地,可以编写接收端代码监听特定 Topic 上的消息到达事件,并处理接收到的数据。 #### 调试技巧 当遇到性能瓶颈或其他运行时问题时,获取堆转储可以帮助分析内存泄漏等问题。利用命令行工具如 jmap 可以为正在运行的应用程序生成堆转储文件[^3]。 另外,调整日志级别有助于更清晰地观察应用程序的行为模式。通过修改 IDE 内部的日志框架设置或将自定义配置应用于外部资源文件的方式实现这一点。例如,如果想要查看 Apache NiFi 组件内部的工作流程细节,可将对应的包名下的日志等级设为 DEBUG 模式[^4]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值