一、深入源码认识RocketMQ-本地运行RocketMQ篇

421 阅读2分钟

拉取代码

git clone https://github.com/apache/rocketmq.git

配置环境变量

  1. 首先我们新建一个文件目录RocketMQ,文件目录如下:

image.png

  1. 图中的三个文件在拉取的代码目录里,但是我们需要修改一些地方

image.png broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a  #broker
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType=SYNC_FLUSH
autoCreateTopicEnable = true

namesrvAddr = 127.0.0.1:9876

#下面的就是日志和一些有关nameserver的信息,我们把${user.home} 替换成自己刚创建的个位置的绝对路径,我的是/Users/yinfengyuchun/Documents/dev_software/RocketMQ

storePathRootDir = /Users/yinfengyuchun/Documents/dev_software/RocketMQ/store
storePathCommitLog = /Users/yinfengyuchun/Documents/dev_software/RocketMQ/store/commitlog
storePathConsumeQueue = /Users/yinfengyuchun/Documents/dev_software/RocketMQ/store/consumequeue
storePathIndex = /Users/yinfengyuchun/Documents/dev_software/RocketMQ/store/index

logback_broker.xml、logback_namesrv.xml:这两个文件我们只需要把其中的${user.home},全部替换成我们创建的目录即可。比如我的:/Users/yinfengyuchun/Documents/dev_software/RocketMQ

运行程序

启动namesrv

找到项目namesrv模块下的 NamesrvStartup 类,如果直接启动肯定会失败的,我们需要先在idea配置一下环境变量

image.png 在里面添加也就是你创建的目录ROCKETMQ_HOME=/Users/yinfengyuchun/Documents/dev_software/RocketMQ随后就可以启动了。 这时候控制台显示

image.png

启动broker

找到broker目录下的 BrokerStartup 类,

image.png

在第一个地方添加 -c 你的broker.conf文件目录,在第二个地方添加ROCKETMQ_HOME=/Users/yinfengyunchun/Documents/dev_software/RocketMQ;NAMESRV_ADDR=127.0.0.1:9876

显示以下即为成功 image.png

测试

先启动example模块下的org.apache.rocketmq.example.simple.PullConsumer

然后找到example模块这个生产者org.apache.rocketmq.example.simple.Producer

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {

        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.setNamesrvAddr("localhost:9876");
        producer.start();

        for (int i = 0; i < 128; i++)
            try {
                {
                    Message msg = new Message("TopicTest",
                        "TagA",
                        "OrderID188",
                        "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
                    SendResult sendResult = producer.send(msg);
                    System.out.printf("%s%n", sendResult);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        producer.shutdown();
    }
}

总结

想要深究RocketMQ源码,就要运行起来。在学习其中特性的时候,我们就可以debug来进行某个功能具体是怎样流转的。其实最好的学习方法就是在阅读的过程中,我们自己魔改一个RocketMQ,这样学习是更快的。