在IDEA上简单搭建RocketMQ源码阅读环境
2021/9/5 17:07:03
本文主要是介绍在IDEA上简单搭建RocketMQ源码阅读环境,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文中,我选择的 RocketMQ 的版本号是 4.8.0
1.下载源码
方式一:下载zip包,然后解压到当前文件夹
- 从码云(国内)上下载
- 从Github(国外)上下载
方式二:在Git Bash界面克隆指定分支代码
- 从码云(国内)上克隆分支 rocketmq-all-4.8.0
git clone -b rocketmq-all-4.8.0 https://gitee.com/apache/rocketmq.git
- 从Github(国外)上克隆分支 rocketmq-all-4.8.0
git clone -b rocketmq-all-4.8.0 https://github.com/apache/rocketmq.git
2. 用IDEA打开项目
-
File -> Open... 打开如下对话框:
-
Open As Project:
3.运行NameServer
在 namesrv 模块找到类 org.apache.rocketmq.namesrv.NamesrvStartup
,并运行它的 main 函数:
3.1 缺少环境变量ROCKETMQ_HOME
运行程序时出现以下报错:
Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
Run -> Edit Configurations... 打开以下界面:
你可以把这个值设置成你当前项目目录的路径(例如,我的项目路径是 ROCKETMQ_HOME=F:\gitcode\gitee\rocketmq
):
ROCKETMQ_HOME 表示 RocketMQ 安装的根目录。
3.2 缺少配置文件logback_namesrv.xml
再次运行 NamesrvStartup 继续报错:
ch.qos.logback.core.joran.spi.JoranException: Could not open [F:\gitcode\gitee\rocketmq\conf\logback_namesrv.xml]. at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:80) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:68) at org.apache.rocketmq.namesrv.NamesrvStartup.createNamesrvController(NamesrvStartup.java:119) at org.apache.rocketmq.namesrv.NamesrvStartup.main0(NamesrvStartup.java:57) at org.apache.rocketmq.namesrv.NamesrvStartup.main(NamesrvStartup.java:51)
我们把路径为 项目目录\distribution\conf\logback_namesrv.xml 拷贝到 项目目录\conf\logback_namesrv.xml
3.3 NameServer启动成功
控制台打印出以下文本,则表示 NameServer 启动成功了:
The Name Server boot success. serializeType=JSON
4.运行Broker
在 broker 模块找到类 org.apache.rocketmq.broker.BrokerStartup
,并运行它的 main 函数:
4.1 缺少环境变量ROCKETMQ_HOME
运行程序时出现以下报错:
Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
还是设置环境变量 ROCKETMQ_HOME,方法同本文 3.1 中的方法,不多赘述。
在IDEA中为每个程序设置环境变量时,它们的环境变量是相互独立的,因此我们需要设置多次。
4.2 缺少配置文件logback_broker.xml
再次运行 BrokerStartup 继续报错:
ch.qos.logback.core.joran.spi.JoranException: Could not open [F:\gitcode\gitee\rocketmq\conf\logback_broker.xml]. at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:80) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:68) at org.apache.rocketmq.broker.BrokerStartup.createBrokerController(BrokerStartup.java:190) at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58)
类似地,我们把路径为 项目目录\distribution\conf\logback_broker.xml 拷贝到 项目目录\conf\logback_broker.xml
4.3 Broker启动成功
控制台打印如下信息,表示 Broker 启动成功:
The broker[你的主机名, 你的主机IPv4地址:10911] boot success. serializeType=JSON
5.运行Producer
在 example 模块找到类 org.apache.rocketmq.example.quickstart.Producer
:
修改 Producer 的代码:
/* * Specify name server addresses. * <p/> * * Alternatively, you may specify name server addresses via exporting environmental variable: NAMESRV_ADDR * <pre> * {@code * producer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876"); * } * </pre> */ producer.setNamesrvAddr("localhost:9876"); // 这行是新增的,namesrv 就启动在本地
运行它的 main 函数...
5.1 No route info of this topic
org.apache.rocketmq.client.exception.MQClientException: No route info of this topic: TopicTest See http://rocketmq.apache.org/docs/faq/ for further details. at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:685) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1343) at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1289) at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:325) at org.apache.rocketmq.example.quickstart.Producer.main(Producer.java:67)
这个错误的原因通常有:
- Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic
- Broker没有正确连接到Name Server
- Producer没有正确连接到Name Server
第三点排除,因为我们已经在代码中明确指定了 Name Server 的地址。
参考自 《RocketMQ 解决 No route info of this topic 异常步骤》
5.1.x 指定broker.conf 并重启 BrokerStartup
我们把路径为 项目目录\distribution\conf\broker.conf 拷贝到 项目目录\conf\broker.conf
在 broker.conf 下面追加以下两个属性:
namesrvAddr=localhost:9876 autoCreateTopicEnable=true
autoCreateTopicEnable 默认值就是 true,但是如果是正式的生产环境,会设置为false
接着,还要在 Run -> Edit Configurations... 修改程序启动参数:
-
启动参数
-c 项目目录\conf\broker.conf
表示指定配置文件路径:
-
启动成功后,控制台的打印又多了 Name Server 地址信息:
The broker[broker-a, 本机IPv4地址:10911] boot success. serializeType=JSON and name server is localhost:9876
5.2 再次运行 Producer
此次没有异常了,控制台打印了 1000 条 SendResult 的 toString 信息。
6.运行Consumer
在 example 模块找到类 org.apache.rocketmq.example.quickstart.Consumer
:
修改 Consumer 的代码:
/* * Specify name server addresses. * <p/> * * Alternatively, you may specify name server addresses via exporting environmental variable: NAMESRV_ADDR * <pre> * {@code * consumer.setNamesrvAddr("name-server1-ip:9876;name-server2-ip:9876"); * } * </pre> */ consumer.setNamesrvAddr("localhost:9876"); // 这行是新增的,namesrv 就启动在本地
运行它的 main 函数...控制台打印 Consumer Started.
。接着就是 1000 条 ConsumeMessageThread_数字 Receive New Messages: [MessageExt ...
信息。
至此,在IDEA上的RocketMQ源码阅读环境搭建成功,且验证成功!
这篇关于在IDEA上简单搭建RocketMQ源码阅读环境的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用