• rocketmq那些事儿之本地调试环境搭建


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

    下载编译

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

    https://github.com/apache/rocketmq

    rocketmq版本:4.5.2

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


    编译1

    编译2

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

    单点环境配置

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

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

    NamesrvStartup

    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:\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服务:


    namesrv启动

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

    -c E: ocketmqconfroker.conf


    broker配置

    broker启动

    这里需要注意如果未配置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


    producer启动

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


    consumer启动

    console

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

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

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


    console模块

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


    console配置

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


    console启动

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

    双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:\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: ocketmqconf2mroker-a.conf


    broker-a启动

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


    console集群信息

    总结

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

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

    作者:freeorange
    个人博客网站:https://www.gclearning.cn/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    kali64位 安装 adb
    ZendStudio在kali下无法启动
    VS2010配置OpenGL开发环境(转)
    OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))
    vs2010 出错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏(转)
    AnyCAD三维控件(转)
    C# WinForm程序中使用Unity3D控件 (转)
    SharpGL学习笔记(一) 平台构建与Opengl的hello World (转)
    c# Invoke的新用法
    c# 在静态方法里,怎么能得到调用者的类名?
  • 原文地址:https://www.cnblogs.com/freeorange/p/12080747.html
Copyright © 2020-2023  润新知