RocketMQ學習(一):入門

目錄

RocketMQ各個角色介紹

準備工作

JDK安裝(已搭建可跳過)

RocketMQ安裝

啓動RocketMQ

1、啓動NameServer

2、啓動Broker

3、關閉RocketMQ

測試RocketMQ


RocketMQ是阿里巴巴2016年MQ中間件,使用Java語言開發,在阿里內部,RocketMQ承接了例如“雙11”等高併發場景的消息流轉,能夠處理萬億級別的消息。

RocketMQ各個角色介紹

  • Producer:消息的發送者;舉例:發信者

  • Consumer:消息接收者;舉例:收信者

  • Broker:暫存和傳輸消息;舉例:郵局

  • NameServer:管理Broker;舉例:各個郵局的管理機構

  • Topic:區分消息的種類;一個發送者可以發送消息給一個或者多個Topic;一個消息的接收者可以訂閱一個或者多個Topic消息

  • Message Queue:相當於是Topic的分區;用於並行發送和接收消息

準備工作

RocketMQ下載

我們在這裏下載二進制版本的文件,也就是zip包,以linux爲例,必備環境有:

  • Linux64位系統
  • JDK1.8(64位)

JDK安裝(已搭建可跳過)

以jdk-8u221-linux-x64.tar.gz爲例,下載好後先將其拷貝至服務器,然後創建想要存放的文件夾(位置自擬)

mkdir /opt/java
# 筆者的jdk放在software裏,將其拷貝過來
cp /opt/software/jdk-8u221-linux-x64.tar.gz /opt/java
cd /opt/java

解壓jdk,完成後會在當前目錄下生成jdk1.8.0_221文件夾

tar -zxvf jdk-8u211-linux-x64.tar.gz
# 解壓之後刪除jdk包(不刪也行,筆者是因爲software裏有)
rm -f jdk-8u211-linux-x64.tar.gz

設置環境變量,這一步的目的是使linux全局都能使用jdk裏的命令,不需要進到相應目錄裏

vim /etc/profile

# 添加以下內容,注意路徑對應你的安裝路徑
export JAVA_HOME=/opt/java/jdk1.8.0_221
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

# 執行下方命令使得環境變量立刻生效
source /etc/profile

測試,成功顯示jdk版本則表示成功

RocketMQ安裝

以rocketmq-all-4.5.2-bin-release.zip爲例,拷貝至服務器,創建要存放的目錄

mkdir /opt/rocketmq
cp /opt/software/rocketmq-all-4.5.2-bin-release.zip /opt/rocketmq
cd /opt/rocketmq

解壓rocketmq二進制文件

# 安裝unzip
yum install unzip
# 解壓
unzip rocketmq-all-4.5.2-bin-release.zip
# 刪除壓縮包
rm -f rocketmq-all-4.5.2-bin-release.zip

完成後,可以看到生成了rocketmq-all-4.5.2-bin-release文件夾,打開能夠看見以下幾個目錄

  • benchmark:一些demo,方便測試

  • bin:啓動腳本,包括shell腳本和CMD腳本

  • conf:實例配置文件 ,包括broker配置文件、logback配置文件等

  • lib:依賴jar包,包括Netty、commons-lang、FastJSON等

啓動RocketMQ

建議先修改兩個配置文件,因爲RocketMQ默認使用的JVM內存很大,可能導致啓動失敗,都是以後臺方式啓動。

# 進入RocketMQ的bin目錄
cd /opt/rocketmq/rocketmq-all-4.5.2-bin-release/bin/
# 編輯runbroker.sh和runserver.sh修改默認JVM大小
vim runbroker.sh
vim runserver.sh

# 參考設置
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m  -XX:MaxMetaspaceSize=320m"

1、啓動NameServer

# 1.進入bin目錄,如果將rocketmq配置到環境變量了就不需要
cd /opt/rocketmq/rocketmq-all-4.5.2-bin-release/bin/
# 2.啓動NameServer,後臺啓動方式
nohup sh mqnamesrv &
# 3.查看啓動日誌
tail -f ~/logs/rocketmqlogs/namesrv.log

執行時會出現nohup: ignoring input and appending output to ‘nohup.out’這樣的信息,直接回車就行,查看日誌時,看到下圖信息則表示NameServer啓動成功

或者使用jps命令查看當前正在運行的java程序裏有無NameServer

2、啓動Broker

# 1.啓動Broker,-n代表指定Broker要連接的NameServer(默認端口9876)
nohup sh mqbroker -n localhost:9876 &
# 2.查看啓動日誌
tail -f ~/logs/rocketmqlogs/broker.log 

查看日誌,出現以下信息代表啓動成功

查看jps

3、關閉RocketMQ

先關Broker,再關NameServer

# 1.關閉NameServer
sh bin/mqshutdown namesrv
# 2.關閉Broker
sh bin/mqshutdown broker

測試RocketMQ

需打開兩個連接服務器的窗口,一個執行生產者腳本,另一個執行消費者腳本

生產者

# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.使用安裝包的Demo發送消息(需要進入bin目錄)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

消費者

# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

查看現象會發現,生產者發出的消息,都被消費者接收了,代表RocketMQ生效了

# 生產者打印
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEB03E3, offsetMsgId=AC1353A400002A9F0000000000083892, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=2], queueOffset=748]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCED03E4, offsetMsgId=AC1353A400002A9F0000000000083946, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=3], queueOffset=749]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEE03E5, offsetMsgId=AC1353A400002A9F00000000000839FA, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=0], queueOffset=749]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEF03E6, offsetMsgId=AC1353A400002A9F0000000000083AAE, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=1], queueOffset=749]

# 消費者打印
ConsumeMessageThread_16 Receive New Messages: [MessageExt [queueId=0, storeSize=180, queueOffset=606, sysFlag=0, bornTimestamp=1572580446202, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446203, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006A7CA, commitLogOffset=436170, bodyCRC=1150532008, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468463, UNIQ_KEY=AC1353A428356FF3C5B5028DC7FA01A9, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 50, 53], transactionId='null'}]] 
ConsumeMessageThread_19 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=612, sysFlag=0, bornTimestamp=1572580446263, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446264, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B95E, commitLogOffset=440670, bodyCRC=2075712480, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC83701C2, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 53, 48], transactionId='null'}]] 
ConsumeMessageThread_18 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=611, sysFlag=0, bornTimestamp=1572580446257, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446258, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B68E, commitLogOffset=439950, bodyCRC=197152660, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC83101BE, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 52, 54], transactionId='null'}]] 
ConsumeMessageThread_1 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=610, sysFlag=0, bornTimestamp=1572580446251, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446252, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B3BE, commitLogOffset=439230, bodyCRC=212700045, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC82B01BA, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 52, 50], transactionId='null'}]] 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章