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
- 啟動jvm的時候注意jvm各個內存區域的大小(如果電腦內存較小,而且不是用在生產環境可以調小一些)
- 因為是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
- 設置nameServer的地址到環境變量中,因為Producer和Consumer都需要知道nameServer的地址才能進一步獲取broker的地址
# 設置到環境變量
export NAMESRV_ADDR=localhost:9876
# 在Producer和Consumer類中設置
producer.setNamesrvAddr("localhost:9876");
consumer.setNamesrvAddr("localhost:9876");
- 發送消息和接受消息
在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地址