rocketmq那些事儿之本地调试环境搭建
上一篇文章中我们已经介绍过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:\rocketmq\conf下,启动时添加参数进行加载
由于程序大多数默认地址都是设置的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:\\rocketmq\\store
#commitLog 存储路径
storePathCommitLog=E:\\rocketmq\\store\\commitlog
消费队列存储路径
storePathConsumeQueue=E:\\rocketmq\\store\\consumequeue
消息索引|存储路径
storePathindex=E:\\rocketmq\\store\\index
#checkpoint 文件存储路径
storeCheckpoint=E:\\rocketmq\\store\\checkpoint
#abort 文件存储路径
abortFile=E:\\rocketmq\\store\\abort
同样注意,不要有空格,空格会导致文件路径不正确,启动不了!
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:\rocketmq\conf\broker.conf


这里需要注意如果未配置namesrv也会启动成功,此时未连接namesrv,最好去看下log日志确认下是否连接成功
日志部分可去查看brokerlog\logs\rocketmqlogs和namesrvlog\logs\rocketmqlogs的日志内容,如启动有问题控制台看不出来,可以在这里查看详细的启动日志信息,或调整日志配置文件等级查看更详细的内容
接下来通过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:\rocketmq\conf\2m下:
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:\\rocketmq\\2m\\store-a
#commitLog 存储路径
storePathCommitLog=E:\\rocketmq\\2m\\store-a\\commitlog
消费队列存储路径
storePathConsumeQueue=E:\\rocketmq\\2m\\store-a\\consumequeue
消息索引|存储路径
storePathindex=E:\\rocketmq\\2m\\store-a\\index
#checkpoint 文件存储路径
storeCheckpoint=E:\\rocketmq\\2m\\store-a\\checkpoint
#abort 文件存储路径
abortFile=E:\\rocketmq\\2m\\store-a\\abort
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:\\rocketmq\\2m\\store-b
#commitLog 存储路径
storePathCommitLog=E:\\rocketmq\\2m\\store-b\\commitlog
消费队列存储路径
storePathConsumeQueue=E:\\rocketmq\\2m\\store-b\\consumequeue
消息索引|存储路径
storePathindex=E:\\rocketmq\\2m\\store-b\\index
#checkpoint 文件存储路径
storeCheckpoint=E:\\rocketmq\\2m\\store-b\\checkpoint
#abort 文件存储路径
abortFile=E:\\rocketmq\\2m\\store-b\\abort
注意其中的配置要写不同的端口避免冲突
日志部分自行参考单点环境配置下,这里不再介绍,也可以不设置直接启动,这里先启动broker-a
-c E:\rocketmq\conf\2m\broker-a.conf

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

总结
本文主要针对本地调试环境搭建进行一个说明,本身而言并不复杂,凡事都要自己动手去尝试,也许中间会出现各种各样的问题,但是解决了之后会对其印象更加深刻吧
以上内容如有问题欢迎指出,笔者验证后将及时修正,谢谢
rocketmq那些事儿之本地调试环境搭建的更多相关文章
- hbase本地调试环境搭建
1,前言 想要深入的了解hbase,看hbase源码是必须的.以下描述了搭建hbase本地调试环境的经历 2,安装步骤 2.1,启动hbase 1,安装java和IDE IntelliJ,下载源码等. ...
- rocketmq那些事儿之集群环境搭建
上一篇入门基础部分对rocketmq进行了一个基础知识的讲解说明,在正式使用前我们需要进行环境的搭建,今天就来说一说rockeketmq分布式集群环境的搭建 前言 之前已经介绍了rocketmq的入门 ...
- OpenCart本地调试环境搭建
OpenCart简介: 免费开源网络版电子商务系统,是建立在线商务网站首选之一.有众多用户和开发基础,结合其丰富特性与模板插件,可最大化定制在线商店.(也就是用来方便开网店的) 本地调试准备: Fir ...
- spark调试环境搭建
到目前为止,基于RDD的spark streamming实时应用和离线应用(主要解析日志)已经写了一些,但是对spark的了解还是很少,所以决心花点精力,对spark做一些比较深入的了解和学习.参照之 ...
- PhpStorm Xdebug远程调试环境搭建原理分析及问题排查
2017年05月26日 经验心得 目录 一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...
- 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程
点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...
- https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题
一:什么是https SSL(Security Socket Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安 ...
- 【转】https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题
正需要这个,写的很好,就转过来了 转自: http://www.cnblogs.com/naniannayue/ 一:什么是https SSL(Security Socket Layer)全称 ...
- Windows下Lua+Redis 断点调试环境搭建==Linux下类似
Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...
随机推荐
- PHP写接口需要注意的问题
PHP写接口需要注意的问题方法前面建议写传过来的参数 1 防止xss攻击2 防止sql语句注入3 sign签名验证4 不经常更新的加索引和缓存 app请求时候 参数都要加urlencode 防止参数带 ...
- zookeeper实现的分布式锁
在分布式系统中,多个jvm对共享资源进行操作时候,要加上锁,这就是分布式锁 利用zookeeper的临时节点的特性,可以实现分布式锁 public class ZookeeperDistrbuteLo ...
- windows SDK中的wininet写http客户端
BOOL InternetSetOption( _In_ HINTERNET hInternet, _In_ DWORD dwOption, _In_ LPVOID lpBuffer, _In_ ...
- Three.js场景的基本组件
1.场景Scene THREE.Scene被称为场景图,可以用来保存所有图形场景的必要信息.每个添加到Scene的对象,包括Scene自身都继承自名为THREE.Object3D对象.Scene不仅仅 ...
- 三、SpringBoot整合Thymeleaf视图
目录 3.1 Thymeleaf视图介绍 3.2 创建SpringBoot项目 3.2 配置Thymeleaf 3.3 编写Demo 3.4 小结 3.1 Thymeleaf视图介绍 先看下官网的介绍 ...
- day52——jquery引入与下载、标签查找、操作标签
day52 jquery引入 下载链接:jQuery官网 https://jquery.com/ 中文文档:jQuery AP中文文档 http://jquery.cuishifeng.cn/ < ...
- 【题解】Luogu P1357 花园
原题传送门 我们先将花圃断环为链,并将\([1,m]\)复制一份到\([n+1,n+m]\),最后要求\([1,n+m]\)是合法序列且\([1,m]\)与\([n+1,n+m]\)相等的序列的数量即 ...
- NOI2019:Stay at Home
7.16 NOI D1 从同步赛开始更起好了 先看了一圈题目,发现T1非常可做,二次函数因为对称轴在\(x < 0\)的地方所以有跟一次函数类似的单调性,搞个单调队列维护一下似乎就可以了.大力码 ...
- SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址
提示: 1.单表查询多条数据用 list<实体类名字> mapper层 1.1单表查询单条数据用 对象 2.两表关联查多条 list<map<String,Object> ...
- 阿里巴巴 Java 开发手册 (六) 并发处理
1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全. 说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 正 ...