使用Idea部署RocketMq 源代码(4.9.4)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用Idea部署RocketMq 源代码(4.9.4)

一、介绍

笔记为主,Idea部署RocketMq的简化流程。

github.com/apache/rock…

二、提示

2.1 IDEA版本

个人使用的Idea版本。

image.png

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 了一下项目

image.png

github 现在墙越来越厚,拉代码经常失败,没办法只能再套一层,用 gitee fork了一遍,双层套娃属于是。

image.png

最后终于成功拉代码到本地(真不容易)。

image.png

三、操作步骤

3.1 下载源代码

个人fork版本(4.9.9):gitee.com/lazyTimes/r…

官方gituhb(最新版本):github.com/apache/rock…

源码目录结构

  • 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,但是要设置在哪里,怎么设置?

image.png

  1. 运行过一次org.apache.rocketmq.namesrv.NamesrvStartup#main()方法之后,Idea会有历史启动记录保留,这时候可以对于启动参数进行配置:

image.png

  1. 点击启动参数Env.....,然后在里面配置前文提到的ROCKETMQ_HOME,这里个人设置了独立路径,建议读者尝试的时候用一个单独的空文件目录,方便后期查找。

image.png

  1. 注意新版本IDEA的按钮位置变了,点击“+”号之后,填充参数。

image.png

  1. 确认之后,会发现下面的效果。然后继续运行Main()方法。

image.png

但是很遗憾,还是报错,日志提示需要logback_namesrv.xml,实际上就是logback的日志配置文件,我们可以从源代码的E:\adongstack\project\selfUp\rocketmq-adong\distribution\conf\logback_namesrv.xml(个人路径为例)找到这个文件的配置。

image.png

  1. 因为不知道文件放在哪里,我们尝试把项目的logback_namesrv.xml配置放到下面这个位置,看看什么效果。

logback的配置这里就不介绍了,可以自行查阅官方文档或者上网查查资料了解配置含义。

image.png

然而这种配置方式是错的,实际上我们要移动配置到 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

image.png

解剖路径如下:


# `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

image.png

最后再运行一遍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);

image.png

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连不上的报错异常。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
22天前
|
运维 网络安全 持续交付
IDEA+Docker 远程一键部署项目:技术干货分享
【10月更文挑战第4天】在现代软件开发中,快速、可靠、自动化的部署流程是提升开发效率和运维质量的关键。IDEA(IntelliJ IDEA)作为Java开发者首选的IDE,结合Docker这一轻量级容器化技术,能够实现远程一键部署项目,极大地简化了开发到生产的流程。今天,我将和大家分享这一组合在工作学习中的实际应用和技术干货。
138 3
|
4月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
268 3
|
18天前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
42 0
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
21天前
|
消息中间件
实践部署《云消息队列RabbitMQ实践》测评
《云消息队列RabbitMQ实践》解决方案原理清晰,尤其在异步通信和解耦方面解释详尽。对初学者而言,部分术语如消息持久化、确认机制及集群性能优化可更细致。部署过程文档详实,涵盖主要环节,但插件配置等细节存在环境问题,需查阅社区资料解决。该方案展示了RabbitMQ的高吞吐量、灵活路由和可靠消息传递能力,但在高可用性和消息丢失处理上可提供更深入配置建议。适用于高并发和解耦场景,如订单处理、日志收集,有助于提升系统可扩展性。总体部署体验良好,实用性较强。
35 0
|
3月前
|
消息中间件 存储 Kubernetes
k8s快速部署rocketMq及rocketMq-console-ng
k8s快速部署rocketMq及rocketMq-console-ng
|
3月前
|
消息中间件 监控 数据可视化
安装部署RabbitMQ
安装部署RabbitMQ
|
4月前
|
消息中间件 数据可视化 RocketMQ
【RocketMQ系列二】通过docker部署单机RocketMQ
【RocketMQ系列二】通过docker部署单机RocketMQ
1074 4
|
4月前
|
SQL 人工智能 前端开发
若依修改01-通义灵码 AI智能编码,从这里开始,搭建,设计,编码,部署,使用AI辅助设计,通义千问把AI辅助设计放到快捷链接当中,vscode可以嵌入通义灵码,必须解决idea+vscode+通义灵
若依修改01-通义灵码 AI智能编码,从这里开始,搭建,设计,编码,部署,使用AI辅助设计,通义千问把AI辅助设计放到快捷链接当中,vscode可以嵌入通义灵码,必须解决idea+vscode+通义灵
|
5月前
|
消息中间件 Kubernetes Android开发
消息队列 MQ产品使用合集之如何在kubernetes环境里面部署
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

热门文章

最新文章