Linux 編譯安裝 Apache RocketMQ 及問題解決

準備

編譯安裝 Rocket MQ 需要以下環境:

  1. 推薦 64 位操作系統,Linux/Unix/Mac;
  2. 64 位 JDK 1.8+;
  3. Maven 3.2.x 以上版本;
  4. Git;
  5. 4GB 以上的硬盤空間;

下載

# 下載安裝包;
wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-source-release.zip

安裝

# 解壓;
unzip rocketmq-all-4.7.1-source-release.zip
cd rocketmq-all-4.7.1-source-release/
# 編譯;
mvn -Prelease-all -DskipTests clean install -U
# 進入安裝目錄;
cd distribution/target/rocketmq-4.7.1/rocketmq-4.7.1/

啓動名稱服務(Name Server)

# 啓動 Name Server
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log

啓動代理(Broker)

nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log 

注意:

若啓動 Name Server 時提示 Cannot allocate memory,修改 bin/runserver.sh

# 根據自己的機器內存大小適當分配內存
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

若啓動 Broker 時提示 Cannot allocate memory,修改 bin/runbroker.sh

# 根據自己的機器內存大小適當分配內存
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

發送 & 接收消息

在發送/接收消息之前,我們需要先告訴客戶端名稱服務器(Name Server)的位置,RocketMQ 提供了多種方式設置 Name Server 位置,此處爲了簡單起見,我們使用環境變量 NAMESRV_ADDR 來設置;

# 指定名稱服務器(Name Server)地址;
export NAMESRV_ADDR=localhost:9876

發送消息

# 發送消息;
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

消息發送成功能看到如下內容:

SendResult [sendStatus=SEND_OK, msgId=C0A8017808D62B193F2D094EC5220000, offsetMsgId=C0A8017800002A9F0000000000000000, messageQueue=MessageQueue [topic=TopicTest, brokerName=shaw-pc, queueId=0], queueOffset=0]
...

若沒設置環境變量 NAMESRV_ADDR,發送消息時會出現如下錯誤信息:

RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
java.lang.IllegalStateException: 
...

接收消息

# 消費消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

消息接收成功能看到如下內容:

Consumer Started.
ConsumeMessageThread_1 Receive New Messages: [MessageExt [brokerName=shaw-pc, queueId=0, storeSize=201, queueOffset=282, sysFlag=0, bornTimestamp=1593693473750, bornHost=/192.168.1.120:44386, storeTimestamp=1593693473752, storeHost=/192.168.1.120:10911, msgId=C0A8017800002A9F0000000000037E63, commitLogOffset=228963, bodyCRC=1250039395, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=296, CONSUME_START_TIME=1593693478959, UNIQ_KEY=C0A801780A3D2B193F2D0993AFD60002, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 50], transactionId='null'}]]
...

關閉服務

# 關閉 broker 服務;
sh bin/mqshutdown broker
# 關閉 name server;
sh bin/mqshutdown namesrv

參考鏈接

  • 《Quick Start - Apache RocketMQ》 http://rocketmq.apache.org/docs/quick-start/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章