关于intellij-idea:使用Idea部署RocketMq-源代码494

11次阅读

共计 5487 个字符,预计需要花费 14 分钟才能阅读完成。

应用 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

  1. 接着咱们进入 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,然而要设置在哪里,怎么设置?

  1. 运行过一次 org.apache.rocketmq.namesrv.NamesrvStartup#main() 办法之后,Idea 会有历史启动记录保留,这时候能够对于启动参数进行配置:
  1. 点击启动参数 Env…..,而后在外面配置前文提到的ROCKETMQ_HOME,这里集体设置了独立门路,倡议读者尝试的时候用一个独自的空文件目录,不便前期查找。
  1. 留神新版本 IDEA 的按钮地位变了,点击“+”号之后,填充参数。
  1. 确认之后,会发现上面的成果。而后持续运行 Main() 办法。

然而很遗憾,还是报错,日志提醒须要logback_namesrv.xml,实际上就是 logback 的日志配置文件,咱们能够从源代码的E:\adongstack\project\selfUp\rocketmq-adong\distribution\conf\logback_namesrv.xml(集体门路为例)找到这个文件的配置。

  1. 因为不晓得文件放在哪里,咱们尝试把我的项目的 logback_namesrv.xml 配置放到上面这个地位,看看什么成果。

logback 的配置这里就不介绍了,能够自行查阅官网文档或者上网查查材料理解配置含意。

然而这种配置形式 是错的,实际上咱们要挪动配置到 ROCKETMQ_HOME 所在目录中。日志报错会疏导咱们进行正确改良。

  1. 最初尝试执行 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 连不上的报错异样。

正文完
 0