rocketmq那些事儿之本地调试环境搭建(代码片段)

freeorange freeorange     2023-05-02     692

关键词:

上一篇文章中我们已经介绍过rocketmq的集群环境搭建,然而在源码的学习中我们还需要进行本地的调试和问题的定位查找,毕竟还是在本地方便些,今天就说一说如何进行源码的本地调试

下载编译

对于rocketmq源码部分的学习,我们当然要先去官网将源码下载到本地,这里笔者使用的是4.5.2版本,从github上官网上下载:

https://github.com/apache/rocketmq

rocketmq版本:4.5.2

使用clean install编译,这里最好跳过test,要不太慢了


技术图片

技术图片

编译完成之后开始本地部署调试环境

单点环境配置

本地启动和集群部署顺序相同主要是两个,先启动namesrv再启动broker ,之前我有讲解过启动脚本,如果你有印象的话,主要涉及到的2个入口类如下,找到对应的启动类:

  • namesrv: org.apache.rocketmq.namesrv.NamesrvStartup
  • broker: org.apache.rocketmq.broker.BrokerStartup

技术图片

技术图片

在启动前将distribution下的conf下的,broker.conf,logback_broker.xml,logback_namesrv.xml放置到本地对应的文件夹下,我这里放到了E: ocketmqconf下,启动时添加参数进行加载

由于程序大多数默认地址都是设置的user.home开头,我们需要进行修改,这里broker.conf文件参数修改如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

#nameServer 地址 分号分割
namesrvAddr=127.0.0.1:9876
#存储路径
storePathRootDir=E:
ocketmqstore
#commitLog 存储路径
storePathCommitLog=E:
ocketmqstorecommitlog
消费队列存储路径
storePathConsumeQueue=E:
ocketmqstoreconsumequeue
消息索引|存储路径
storePathindex=E:
ocketmqstoreindex
#checkpoint 文件存储路径
storeCheckpoint=E:
ocketmqstorecheckpoint
#abort 文件存储路径
abortFile=E:
ocketmqstoreabort

同样注意,不要有空格,空格会导致文件路径不正确,启动不了!

logback文件同时也要进行修改,为了区分namesrv和broker日志,用了两个文件夹

在logback_namesrv.xml中修改:$user.home修改为E:/rocketmq/namesrvlog

在logback_broker.xml中修改:$user.home修改为E:/rocketmq/brokerlog

至此基本的配置环境已经准备完毕

单点环境启动

设置ROCKETMQ_HOME环境变量,让应用找到配置文件,不设置则报错(源码部分可看出来),另外设置时一定要注意不要有空格,有空格也报错,如下:


技术图片

idea中设置环境变量:


技术图片

启动namesrv服务:


技术图片

继续启动broker,同样设置环境变量ROCKETMQ_HOME,然后BrokerStartup run启动下,可以看到报错,已经指定了ROCKETMQ_HOME怎么还报这个?因为未指定broker.conf配置文件,在集群部署的时候脚本后面参数这里也是有这个的,这里指定:

-c E: ocketmqconfroker.conf


技术图片

技术图片

这里需要注意如果未配置namesrv也会启动成功,此时未连接namesrv,最好去看下log日志确认下是否连接成功

日志部分可去查看brokerloglogs ocketmqlogs和namesrvloglogs ocketmqlogs的日志内容,如启动有问题控制台看不出来,可以在这里查看详细的启动日志信息,或调整日志配置文件等级查看更详细的内容

接下来通过org.apache.rocketmq.example.quickstart包快速启动生产者和消费者来进行本地测试,设置namesrv地址,producer.setNamesrvAddr("127.0.0.1:9876"),启动生产者org.apache.rocketmq.example.quickstart.Producer


技术图片

消费者同样设置namesrv地址,consumer.setNamesrvAddr("127.0.0.1:9876"),启动消费者org.apache.rocketmq.example.quickstart.Consumer


技术图片

console

为了本地观察的方便,将console也进行本地启动,便于本地调试观察,源码地址为:

https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

我在本地将源码中新建了个模块,将代码导入,方便本地启动


技术图片

同样添加启动配置namesrv地址:


技术图片

启动之后浏览器访问8080端口成功


技术图片

至此单点环境算是搭建完毕,之后源码学习调试可以在此基础上进行了

双master环境配置

集群环境就不搭建slave了,直接双master来本地调试就好,先进行配置文件的修改,文件放置在E: ocketmqconf2m下:

broker-a 配置文件:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10911
#nameServer 地址 分号分割
namesrvAddr=127.0.0.1:9876
#存储路径
storePathRootDir=E:
ocketmq2mstore-a
#commitLog 存储路径
storePathCommitLog=E:
ocketmq2mstore-acommitlog
消费队列存储路径
storePathConsumeQueue=E:
ocketmq2mstore-aconsumequeue
消息索引|存储路径
storePathindex=E:
ocketmq2mstore-aindex
#checkpoint 文件存储路径
storeCheckpoint=E:
ocketmq2mstore-acheckpoint
#abort 文件存储路径
abortFile=E:
ocketmq2mstore-aabort

broker-b 配置文件:

brokerClusterName = DefaultCluster
brokerName = broker-b
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10921
#nameServer 地址 分号分割
namesrvAddr=127.0.0.1:9876
#存储路径
storePathRootDir=E:
ocketmq2mstore-b
#commitLog 存储路径
storePathCommitLog=E:
ocketmq2mstore-bcommitlog
消费队列存储路径
storePathConsumeQueue=E:
ocketmq2mstore-bconsumequeue
消息索引|存储路径
storePathindex=E:
ocketmq2mstore-bindex
#checkpoint 文件存储路径
storeCheckpoint=E:
ocketmq2mstore-bcheckpoint
#abort 文件存储路径
abortFile=E:
ocketmq2mstore-babort

注意其中的配置要写不同的端口避免冲突

日志部分自行参考单点环境配置下,这里不再介绍,也可以不设置直接启动,这里先启动broker-a

-c E: ocketmqconf2mroker-a.conf


技术图片

同样的方式启动broker-b,检查下日志没有报错就可以,同时可在console中观察集群是否部署成功


技术图片

总结

本文主要针对本地调试环境搭建进行一个说明,本身而言并不复杂,凡事都要自己动手去尝试,也许中间会出现各种各样的问题,但是解决了之后会对其印象更加深刻吧

以上内容如有问题欢迎指出,笔者验证后将及时修正,谢谢

rocketmq源码本地搭建调试(代码片段)

1GitHub源码gitclonehttps://github.com/apache/rocketmq.git导入IDEA,可在命令行执行mvncompile一下,保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。2启动Namesrv到namesrv模块找到NamesrvStartup,... 查看详情

一文带你搭建rocketmq源码调试环境(代码片段)

tothetargetVM,address:\'127.0.0.1:52279\',transport:\'socket\'Thebroker[broker-a,192.168.10.197:10911]bootsuccess.serializeType=JSONandnameserveris127.0.0.1:98764.3查看启动日志另外我们到logs目录看下启动的详细日志,打开broker. 查看详情

3rocketmq源码解析之源代码环境搭建(代码片段)

在之前的文章中我们知道了RocketMQ里面的核心功能、架构和概念。并且也介绍了它的简单使用与SpringBoot的集成。下面开始我们对RocketMQ的源码探索,首先我们先在自己本地搭建RocketMQ的源代码环境。1、下载源代码首先我们可... 查看详情

rocketmq源码—rocketmq源码调试环境准备(代码片段)

详细介绍了RocketMQ4.9.3分支的源码调试环境搭建等一系列准备工作。RocketMQ的源码这么多,我们肯定不会全部看完的,我们的源码分析主要会涉及到namesrv、broker、client、remoting、store等模块,也就是生产者、消费者、name... 查看详情

jdk源码那些事儿之并发concurrenthashmap上篇(代码片段)

前面前已经说明了HashMap以及红黑树的一些基本知识,对JDK8的HashMap也有了一定的了解,本篇就开始看看并发包下的ConcurrentHashMap,说实话,还是比较复杂的,笔者在这里也不会过多深入,源码层次上了解一些主要流程即可,清楚... 查看详情

聊聊netty那些事儿之reactor在netty中的实现(创建篇)(代码片段)

聊聊Netty那些事儿之Reactor在Netty中的实现-创建篇Netty服务端代码模板Netty对IO模型的支持EventLoopEventLoopGroupServerSocketChannelSocketChannel多种NIO的实现创建主从Reactor线程组MultithreadEventLoopGroupMultithreadEventExecutorGroup1.创建用于启动Rea 查看详情

rocketmq单机环境搭建(代码片段)

大家好,我是冰河~~今天,带来一篇搭建RocketMQ单机环境的文章,为后面的分布式事务专栏做准备。RocketMQ是阿里巴巴开源的一款高性能分布式消息中间件,有关RocketMQ的详细讲解,后面会单独开设一个RocketMQ专... 查看详情

云计算的那些事儿之计算虚拟化

上一篇介绍了虚拟化分别从计算虚拟化、存储虚拟化和网络虚拟化几个角度总体说了一下。下面就主意进行讲解,本篇先介绍计算虚拟化,其实我觉得用计算虚拟化可能比较狭隘,我个人更偏向另个一个更大的概念,软件定义的... 查看详情

rocketmq云服务器和本地基础安装搭建及可视化控制台安装使用(代码片段)

...分享🐳。偶尔认知思考、日常水文🐌。目录一、RocketMQ介绍1、RocketMQ是什么?2、MQ的应用场景2.1、异步任务处理2.2、应用程序解耦合2.3、日志收集3、消息队列技术选型对比二、RocketMQ安装和基础使用1、RocketMQ组成结... 查看详情

jdk源码那些事儿之locksupport(代码片段)

前面一篇文章中说明了Object的阻塞唤醒机制,今天我们要讲解另一个类LockSupport,在AQS中你能看见它的身影,所以需要提前了解其实现和使用机制,便于后面深入AQS的学习前言JDK版本号:1.8.0_171在源码阅读之前希望大家先去阅读... 查看详情

rocketmq环境搭建(代码片段)

下载RocketMQ版本:4.5.1下载地址环境Linux64位系统JDK1.8(64位)安装上传二进制包到/usr/local/rocketmq目录解压unziprocketmq-all-4.5.1-bin-release.zip-bash:unzip:未找到命令yuminstall-yunzipzip解压目录bin:启动脚本,包括shell脚本和CMD 查看详情

jdk源码那些事儿之常用的arraylist(代码片段)

前面已经讲解集合中的HashMap并且也对其中使用的红黑树结构做了对应的说明,这次就来看下简单一些的另一个集合类,也是日常经常使用到的ArrayList,整体来说,算是比较好理解的集合了,一起来看下前言jdk版本:1.8类定义publi... 查看详情

聊聊netty那些事儿之从内核角度看io模型(代码片段)

聊聊Netty那些事儿之从内核角度看IO模型网络包接收流程性能开销网络包发送流程性能开销再谈(阻塞,非阻塞)与(同步,异步)阻塞与非阻塞阻塞非阻塞同步与异步同步异步IO模型阻塞IO(BIO)阻塞读阻塞写阻塞IO模... 查看详情

前端开发调试之代理配置(代码片段)

前端开发往往需要在本地调试环境和线上环境之间灵活切换,以将要调试的一个页面为例,页面引用了如下的静态资源,要想在本地开发调试下面引入的js代码,最直接的方法是在把引入的资源路径改成本地调试路径,并起一个... 查看详情

聊聊netty那些事儿之从内核角度看io模型(代码片段)

今天我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。同时内置了很多非常有用的模块基本上做到了开箱即用,... 查看详情

聊聊netty那些事儿之从内核角度看io模型(代码片段)

今天我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。同时内置了很多非常有用的模块基本上做到了开箱即用,... 查看详情

jdk源码那些事儿之hashmap.treenode(代码片段)

前面几篇文章已经讲解过HashMap内部实现以及红黑树的基础知识,今天这篇文章就讲解之前HashMap中未讲解的红黑树操作部分,如果没了解红黑树,请去阅读前面的两篇文章,能更好的理解本章所讲解的红黑树源码操作,全文默认... 查看详情

rocketmq单机环境搭建(代码片段)

大家好,我是冰河~~今天,带来一篇搭建RocketMQ单机环境的文章,为后面的分布式事务专栏做准备。RocketMQ是阿里巴巴开源的一款高性能分布式消息中间件,有关RocketMQ的详细讲解,后面会单独开设一个RocketMQ专... 查看详情