1. 依賴工具
JDK :1.8+
Maven
IntelliJ IDEA
2. 原始碼拉取
從官方倉庫 [https://github.com/apache/rocketmq) Fork
出屬於自己的倉庫。為什麼要 Fork
?既然開始閱讀、除錯原始碼,我們可能會寫一些註釋,有了自己的倉庫,可以進行自由的提交。?
使用 IntelliJ IDEA
從 Fork
出來的倉庫拉取程式碼。拉取完成後,Maven
會下載依賴包,可能會花費一些時間,耐心等待下。
在等待的過程中,我來簡單說下,搭建除錯環境的過程:
啟動 RocketMQ Namesrv
啟動 RocketMQ Broker
啟動 RocketMQ Producer
啟動 RocketMQ Consumer
最小化的 RocketMQ 的環境,暫時不考慮 Namesrv 叢集、Broker 叢集、Consumer 叢集。
? 另外,本文使用的 RocketMQ 版本是 4.4.0-SNAPSHOT
。
3. 啟動 RocketMQ Namesrv
開啟 org.apache.rocketmq.namesrv.NameServerInstanceTest
單元測試類,參考 #startup()
方法,我們編寫 #main(String[] args)
靜態方法,程式碼如下:
|
然後,右鍵執行,RocketMQ Namesrv 就啟動完成。輸出日誌如下:
|
最後,這是一個可選的步驟,命令列中輸入 telnet 127.0.0.1 9876
,看看是否能連線上 RocketMQ Namesrv 。
4. 啟動 RocketMQ Broker
開啟 org.apache.rocketmq.broker.BrokerControllerTest
單元測試類,參考 #testBrokerRestart()
方法,我們編寫 #main(String[] args)
方法,程式碼如下:
|
然後,右鍵執行,RocketMQ Broker 就啟動完成了。輸出日誌如下:
|
不要懵逼,我們開啟下 RocketMQ Namesrv 那,已經輸出日誌如下:
18:17:30.443 [NettyServerCodecThread_5] INFO RocketmqRemoting - NETTY SERVER PIPELINE: channelRegistered 127.0.0.1:63847 18:17:30.443 [NettyServerCodecThread_5] INFO RocketmqRemoting - NETTY SERVER PIPELINE: channelActive, the channel[127.0.0.1:63847] 18:17:30.457 [RemotingExecutorThread_4] DEBUG RocketmqNamesrv - receive request, 103 127.0.0.1:63847 RemotingCommand [code=103, language=JAVA, version=275, opaque=0, flag(B)=0, remark=null, extFields={brokerId=0, bodyCrc32=1880081823, clusterName=DefaultCluster, brokerAddr=192.168.3.26:10911, haServerAddr=192.168.3.26:10912, compressed=false, brokerName=broker-a}, serializeTypeCurrentRPC=JSON] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, BenchmarkTest QueueData [brokerName=broker-a, readQueueNums=1024, writeQueueNums=1024, perm=6, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, OFFSET_MOVED_EVENT QueueData [brokerName=broker-a, readQueueNums=1, writeQueueNums=1, perm=6, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, broker-a QueueData [brokerName=broker-a, readQueueNums=1, writeQueueNums=1, perm=7, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, TBW102 QueueData [brokerName=broker-a, readQueueNums=8, writeQueueNums=8, perm=7, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, SELF_TEST_TOPIC QueueData [brokerName=broker-a, readQueueNums=1, writeQueueNums=1, perm=6, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new topic registered, DefaultCluster QueueData [brokerName=broker-a, readQueueNums=16, writeQueueNums=16, perm=7, topicSynFlag=0] 18:17:30.458 [RemotingExecutorThread_4] INFO RocketmqNamesrv - new broker registered, 192.168.3.26:10911 HAServer: 192.168.3.26:10912 複製程式碼
妥妥的,原來 RocketMQ Broker 已經啟動完成,並且註冊到 RocketMQ Namesrv 上。
最後,這是一個可選的步驟,命令列中輸入 telnet 127.0.0.1 10911
,看看是否能連線上 RocketMQ Broker 。
5. 啟動 RocketMQ Producer
開啟 org.apache.rocketmq.example.quickstart.Producer
示例類,程式碼如下:
|
注意,在
<x>
哈哈哈哈處,我們增加了producer.setNamesrvAddr("127.0.0.1:9876")
程式碼塊,指明 Producer 使用的 RocketMQ Namesrv 。? 可能會有胖友會問,為什麼指定的不是 RocketMQ Broker 呢?請退回到 「0. 友情提示」 。
然後,右鍵執行,RocketMQ Producer 就啟動完成。輸出日誌如下:
|
沒有最後。
6. 啟動 RocketMQ Consumer
開啟 org.apache.rocketmq.example.quickstart.Consumer
示例類,程式碼如下:
|
注意,在
<x>
哈哈哈哈處,我們還增加了consumer.setNamesrvAddr("127.0.0.1:9876")
程式碼塊,指明 Consumer 使用的 RocketMQ Namesrv 。? 再來一道送命題,為什麼指定的不是 RocketMQ Broker 呢?
然後,右鍵執行,RocketMQ Consumer 就啟動完成。輸入日誌如下:
|