引:终于要开始了吗,一直想好好弄清楚一款MQ,作为一名Javaer,肯定选择RocketMQ,希望今天是一个好开始!
前置
在看源码前大家都至少应该使用过RocketMQ,并且了解它的相关原理,所以这里丢出两个链接,虽然有点老~
依赖工具
- Git
- Maven
- JDK1.8
- IntelliJ IDEA
源码拉取
从官方仓库 https://github.com/apache/rocketmq 通过Git拉取代码到本地,在2019.6.8看到最新的release版本是4.5.1,但是为了和芋艿大佬保持一致,我也选择了4.4.0版本,所以将代码拉取到本地之后,我们切换到4.4.0分支。
1 | git clone https://github.com/apache/rocketmq.git |
然后我们就可以看是搭建调试环境啦~
环境搭建
启动 RocketMQ Namesrv
打开 org.apache.rocketmq.namesrv.NameServerInstanceTest
单元测试类,参考 #startup()
方法,我们编写 #main(String[] args)
静态方法,代码如下:
1 | public static void main(String[] args) throws Exception { |
运行之后,输出如下日志就代表OK啦~
1 | 14:41:41.202 [NettyEventExecutor] INFO RocketmqRemoting - NettyEventExecutor service started |
启动 RocketMQ Broker
打开 org.apache.rocketmq.broker.BrokerControllerTest
单元测试类,参考 #testBrokerRestart()
方法,我们编写 #main(String[] args)
方法,代码如下:
1 | public static void main(String[] args) throws Exception { |
运行之后,虽然在broker下面什么日志都没有,但是在Namesrv已经看到了broker的注册日志,如下:
1 | 15:19:21.437 [NettyServerCodecThread_4] INFO RocketmqRemoting - NETTY SERVER PIPELINE: channelRegistered 127.0.0.1:58887 |
启动 RocketMQ Producer
打开 org.apache.rocketmq.example.quickstart.Producer
示例类,代码如下:
1 | public class Producer { |
根据注释,我们需要指明Namesrv地址:producer.setNamesrvAddr("127.0.0.1:9876");
运行之后就会发送1000条消息啦,然后就会断开与Namesrv,broker的连接,日志如下:
1 | SendResult [sendStatus=SEND_OK, msgId=C0A8011C69E618B4AAC22757459803E7, offsetMsgId=C0A8011C000022B80000000000057CB0, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=0], queueOffset=499] |
启动 RocketMQ Producer
打开 org.apache.rocketmq.example.quickstart.Consumer
示例类,代码如下:
1 | public class Consumer { |
根据注释,我们这里也需要指明Namesrv地址:consumer.setNamesrvAddr("127.0.0.1:9876");
疯狂消费的日志如下:
1 | Consumer Started. |
It`s over !!
总结
很喜欢下面的话:
源码,是原理的具象化
原理,是代码的抽象化