应用 Idea 部署 RocketMq 源代码(4.9.4)
一、介绍
笔记为主,Idea 部署 RocketMq 的简化流程。
https://github.com/apache/roc…
二、提醒
2.1 IDEA 版本
集体应用的 Idea 版本。
2.2 RocketMq 源码版本
须要留神下载源代码之前,先检查一下本人的 java 版本,最低要求 JDK1.8 以上。
集体拉取的版本为 4.9.4,因为时效性将来版本有些代码可能会被改良,所以要留神版本问题。
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
拉源码,这一步不须要过多介绍,间接点击主页右上角即可。
这里从官网 fork 了一下我的项目
github 当初墙越来越厚,拉代码常常失败,没方法只能再套一层,用 gitee fork 了一遍,双层套娃属于是。
最初终于胜利拉代码到本地(真不容易)。
三、操作步骤
3.1 下载源代码
集体 fork 版本(4.9.9):https://gitee.com/lazyTimes/rocketmq-adong.git
官网 gituhb(最新版本):https://github.com/apache/rocketmq.git
源码目录构造:
- broker: broker 模块(broke 启动过程)
- client:音讯客户端,蕴含音讯生产者、音讯消费者相干类
- common:公共包
- dev:开发者信息(非源代码)
- distribution:部署实例文件夹(非源代码)
- example: RocketMQ 例代码
- filter:音讯过滤相干根底类
- filtersrv:音讯过滤服务器实现相干类(Filter 启动过程)
- logappender:日志实现相干类
- namesrv:NameServer 实现相干类(NameServer 启动过程)
- openmessageing:音讯凋谢规范
- remoting:近程通信模块,基于 Netty
- srcutil:服务工具类
- store:音讯存储实现相干类
- style:checkstyle 相干实现
- test:测试相干类
- tools:工具类,监控命令相干实现类
3.2 查看 Maven 配置
拉下来之后不要急着调配置,咱们先查看 idea 外面的 Maven 配置是否被重置,如果被重置了就改回来,另外最好检查一下以后应用的我的项目编译版本,IDEA 常常会用内置的 JDK 版本对我的项目编译,集体也因为这个问题节约了不少工夫。
总而言之,拉下我的项目做上面三件事:
- 编译,查看是否报错
- 查看 JDK 版本
- 查看 Maven 配置,以及 Maven 所用 JDK 打包版本(在 setting 里能够看到)。
- 重复查看,确保无误。
3.3 设置 NameServ
首先是设置命名服务,这是 Producer 发送音讯必要服务之一。
这一步外围步骤就两个:
- 启动参数设置
ROCKETMQ_HOME
,如果不会设置就间接我的项目的根门路,但还是倡议设置一个独自目录外面不便后续察看。 - 设置
logback_namesrv.xml
,它所在的门路必须跟ROCKETMQ_HOME
雷同,否则NameServ
启动会报错。
设置 ROCKETMQ
运行主目录,Mac 零碎和 Window 设置进去的门路不一样,集体应用 Windows 作为案例,所以设置的门路为:E:\adongstack\project\selfUp\rocketmq-adong
- 接着咱们进入 NameSer 这个我的项目,间接跑
org.apache.rocketmq.namesrv.NamesrvStartup#main()
办法,不出意外会给一个提醒:
Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
日志十分简洁明了,要求设置 ROCKETMQ_HOME
,然而要设置在哪里,怎么设置?
- 运行过一次
org.apache.rocketmq.namesrv.NamesrvStartup#main()
办法之后,Idea 会有历史启动记录保留,这时候能够对于启动参数进行配置:
- 点击启动参数 Env…..,而后在外面配置前文提到的
ROCKETMQ_HOME
,这里集体设置了独立门路,倡议读者尝试的时候用一个独自的空文件目录,不便前期查找。
- 留神新版本 IDEA 的按钮地位变了,点击“+”号之后,填充参数。
- 确认之后,会发现上面的成果。而后持续运行
Main()
办法。
然而很遗憾,还是报错,日志提醒须要logback_namesrv.xml
,实际上就是 logback 的日志配置文件,咱们能够从源代码的E:\adongstack\project\selfUp\rocketmq-adong\distribution\conf\logback_namesrv.xml
(集体门路为例)找到这个文件的配置。
- 因为不晓得文件放在哪里,咱们尝试把我的项目的
logback_namesrv.xml
配置放到上面这个地位,看看什么成果。
logback 的配置这里就不介绍了,能够自行查阅官网文档或者上网查查材料理解配置含意。
然而这种配置形式 是错的,实际上咱们要挪动配置到 ROCKETMQ_HOME 所在目录中。日志报错会疏导咱们进行正确改良。
- 最初尝试执行
org.apache.rocketmq.namesrv.NamesrvStartup#main()
办法,胜利!打印内容如下。
The Name Server boot success. serializeType=JSON
3.4 设置 Broker
Broker 负责长久化队列音讯,以及从 NameServ 中寻找路由信息,Producer 借助 NameServ 找到 Broker 之后会推送音讯,Broker 胜利收到音讯后告诉 Producer 音讯发送胜利。
这一步设置比拟要害,仔细观察配置。
设置 Broker 次要思考两点,第一点是 broker.conf
配置,第二点是配置 Broker 的 logback 的 xml 日志文件。
接着咱们设置 Broker,Broker 的启动入口在 src/main/java/org/apache/rocketmq/broker/BrokerStartup.java
,一上来咱们先不急着改启动环境的参数,而是先把 Broker 的要害配置改了, 次要设置 NameServer 的地址、Broker 的名称等相干属性,这些依赖配置文件broker.conf
。
首先咱们要先查本人本地回环网卡的 IP 地址(就是 s 你上网那张网卡的 IP),比方我的 IP 是192.168.0.6
。
有了 IP 之后,咱们能够先备份一份 distribution/conf/broker.conf
文件,而后批改外面的配置:
也能够间接复制一份
distribution/conf/broker.conf
配置到 ROCKETMQ_HOME而后再进行改变,这里仅仅是集体习惯问题,不便日后间接在我的项目外面立马能够看到本人定义的配置。
broker.conf
官网给的默认配置:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
broker.conf
批改之后的配置,留神有新增内容,集体命名为broker-back.conf
:
这些配置都能够从源代码的配置文件外面找到对应的参数属性。
# 应用如下配置文件
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
storePathRootDir=E:\\adongstack\\project\\selfUp\\rocketmq-adong\\tmp\\run-dev\\store
storePathCommitLog=E:\\adongstack\\project\\selfUp\\rocketmq-adong\\tmp\\run-dev\\store\\commitlog
# 重点内容
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.0.6
brokerIP2=192.168.0.6
autoCreateTopicEnable=true
为啥是 store 和 store\commitlog,一个是 Broker 的长久化仓库地址,一个是提交日志存储地址,这里倡议离开,RocketMq 的 commitlog 应用的是追加写入的形式。
留神网上有一些教程的配置文件内容可能比这份文件要多一些,其实只是更加细化的配置而已,这些简略的配置足够咱们调试最简略的源码。
批改实现之后,咱们同样把 distribution/conf/logback_brokerxml 以及 broker.conf 拷贝到 ROCKETMQ_HOME
当中。通过这么一番操作配置,最终后果如下:
这里把所有的配置放到一个文件夹外面,方便管理,截图所属文件的根门路是
E:\adongstack\project\selfUp\rocketmq-adong\tmp\run-dev
解剖门路如下:
# `E:\adongstack\project\selfUp\rocketmq-adong\tmp\run-dev`//.....
- store
- commitlog
- broker.conf
- logback_broker.xml
- logback_namesrv.xml
最初,咱们在 cc
的启动参数进行如下配置:
-c 启动参数
对应 conf 配置文件。
-c E:\\adongstack\\project\\selfUp\\rocketmq-adong\\tmp\\run-dev\\broker.conf
最初再运行一遍 BrokerStartup
的 main 办法,呈现上面的内容阐明配置胜利:
The broker[broker-a, 192.168.0.103:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
3.5 运行测试
首先咱们把后面两个大节配置的 NameServ 和 Broker 的配置进行启动:
Broker 启动打印:
The broker[broker-a, 127.0.0.1:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
NameServ 启动打印:
The Name Server boot success. serializeType=JSON
接着是应用 Producer 做测试,这里应用的是 org.apache.rocketmq.example.quickstart.Producer#main()
办法,留神这个案例是不可能间接拿来用的,因为咱们应用 debug 模式,须要放开一行正文代码。
因为下面的所有配置都是应用官网举荐的默认配置,所以须要只须要放开这一段正文,默认连贯的 NameServ 端口是 9876。
// Uncomment the following line while debugging, namesrvAddr should be set to your local address
// 调试时勾销正文以下行,namesrvAddr 应设置为您的本地地址,读者第一次看到这里应该是正文过的
producer.setNamesrvAddr(DEFAULT_NAMESRVADDR);
Producer 的最终打印后果如下:
SendResult [sendStatus=SEND_OK, msgId=7F000001858818B4AAC28569CA6C0000, offsetMsgId=7F00000100002A9F00000000000000EF, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=0], queueOffset=1]
21:45:02.846 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[127.0.0.1:9876] result: true
21:45:02.848 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[127.0.0.1:10911] result: true
小结
IDEA 部署源代码整体流程比较简单,比拟麻烦的反而是一些运行参数的配置上。另外 github 当初连贯非常不稳固,倡议用国内的一些代码治理网站进行同步,gitee、coding 都能够。
须要留神进行测试的时候肯定要把正文放开,否则会始终呈现 Producer 连不上的报错异样。