• RocketMQ源码 — 一、 quikstart


    RocketMQ quikstart

    • 获取源码
      git clone https://github.com/alibaba/RocketMQ.git
    • 编译打包
      cd RocketMQ
      bash install.sh

    这是一个maven工程,官方给出了编译打包的脚本install.sh,主要就是

    # mvn 编译打包
    mvn -Dmaven.test.skip=true clean package install assembly:assembly -U
    # 建立一个软连接(快捷方式)
    ln -s target/alibaba-rocketmq-broker/alibaba-rocketmq devenv
    
    • 生成idea工程文件
      生成工程文件就可以使用IDE直接打开
    mvn idea:idea
    # 生clipse工程文件
    mvn eclipse:eclipse
    
    • 设置环境变量
    # 上面创建了devenv软连接
    cd devenv
    # 将devenv目录作为ROCKETMQ_HOME,其实也可以作为jvm启动参数传入,broker和nameServer启动的时候需要这个目录参数,默认取的是jvm启动的时候rocketmq.home.dir的值
    echo "ROCKETMQ_HOME=`pwd`" >> ~/.bash_profile
    # 让上面的环境变量起作用
    source ~/.bash_profile
    
    • 启动nameServer和broker
      启动NameServer
    cd bin
    chmod u+x mqnamesrv
    bash mqnamesrv
    

    如果启动成功显示

    Listening for transport dt_socket at address: 9555
    The Name Server boot success. serializeType=JSON
    

    启动脚本mqnamesrv掉用的是runserver.sh,其实就是执行NamesrvStart这个类,这个类负责启动nameServer,然后在启动jvm的时候添加一堆参数,注意runserver.sh

    1. 启动jvm的时候注意jvm各个内存区域的大小(如果电脑内存较小,而且不是用在生产环境可以调小一些)
    2. 因为是jvm,可以打开远程调试端口把下一句话的注释去掉,就可以进行远程调试了
    # 去掉下面这句话前面的#
    JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
    

    启动broker

    chmod u+x mqbroker
    bash mqbroker -n localhost:9876
    

    和nameServer启动类似mqbroker调用了runbroker.sh来启动jvm运行BrokerStart类,在里面添加各种参数,也可以通过去掉上面那句话来进行远程调试(注意远程调试端口不要和上面nameServer的冲突了)。

    • 运行example
    1. 设置nameServer的地址到环境变量中,因为Producer和Consumer都需要知道nameServer的地址才能进一步获取broker的地址
    # 设置到环境变量
    export NAMESRV_ADDR=localhost:9876
    # 在Producer和Consumer类中设置
    producer.setNamesrvAddr("localhost:9876");
    consumer.setNamesrvAddr("localhost:9876");
    
    1. 发送消息和接受消息
      在IDE中打开这个工程(上面已经生成工程文件),然后直接运行Producer和Consumer两个类的main方法就可以了。
      也可以通过提供的脚本运行
    bash tools.sh com.alibaba.rocketmq.example.quickstart.Producer
    bash tools.sh com.alibaba.rocketmq.example.quickstart.Consumer
    

    模块划分

    参考

    RocketMQ共包含9个模块

    • rocketmq-common:通用的枚举、基类方法、或者数据结构,包名有admin、consumer、filter、hook、message
    • rocketmq-remoting:使用netty的客户端、服务端,使用fastjson序列化,自定义二进制协议
    • rocketmq-srvutil:只有一个ServerUtil类,只提供Server程序依赖,尽可能减少客户端依赖
    • rocketmq-store:消息存储,索引,consumerLog,commitLog等
    • rocketmq-client:消息发送和接收,包含consumer和producer
    • rocketmq-filtersrv:消息过滤器
    • rocketmq-broker:服务端,接受消息,存储消息,consumer拉取消息
    • rocketmq-tools:命令行工具
    • rocketmq-namesrv:NameServer,类似服务注册中心,broker在这里注册,consumer和producer在这里找到broker地址
  • 相关阅读:
    做自己的ORMapping Framework ---- 第三讲 关于Attribute
    Hugepages,hugetlb_shm_group与ORA-27125
    65个面试回答技巧
    在线修改Schema
    percona innobackupex 遇到 connect to MySQL server as DBD::mysql module is not installed 问题
    MYSQL中的日期转换
    SHOW INNODB STATUS 探秘
    11g手动打补丁
    11g OCM自动打补丁
    How to create Oracle ASM devices using device-mapper multipath devices in Red Hat Enterprise Linux 6
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/6287392.html
Copyright © 2020-2023  润新知