RocketMQ快速上手

RocketMQ 是阿里開(kāi)源的一款高性能、高吞吐量的消息中間件切心。

RocketMQ 架構(gòu)介紹

RocketMQ架構(gòu)分為4部分片吊,Producer、Consumer全谤、Nameserver爷贫、Broker漫萄,四部分均可集群部署。

Producer毕骡、Consumer為客戶端。Producer是消息發(fā)送端葵孤,Consumer是消費(fèi)消息端橱赠。開(kāi)發(fā)過(guò)程中,我們會(huì)對(duì)這一部分關(guān)注更多宰啦。

Nameserver饼拍、Broker為服務(wù)端。Namesever可以看作架構(gòu)的大腦漓柑,負(fù)責(zé)服務(wù)的發(fā)現(xiàn)和路由叨吮;Broker可以看作消息的中轉(zhuǎn)站茶鉴,Producer發(fā)送的消息會(huì)先到Broker,然后由Consumer消費(fèi)惭蹂。

RocketMQ 架構(gòu)

RocketMQ 安裝

下面介紹如何在本地安裝RocketMQ割粮,并使用源碼中自帶的demo發(fā)送消息穆刻、消費(fèi)消息。

環(huán)境準(zhǔn)備:

  1. 64bit OS, Linux/Unix/Mac 平臺(tái)
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x;

下載代碼:RocketMQ項(xiàng)目由github托管榜轿,我們將從github上下載rocketMQ的源碼
鏈接:RocketMQ github倉(cāng)庫(kù)

如果裝有g(shù)it朵锣,可以通過(guò)git checkout 代碼到本地诚些,如果git沒(méi)有也可以直接下載安裝包解壓得到文件皇型,文件目錄如下


RocketMQ項(xiàng)目目錄

安裝步驟如下:

構(gòu)建弃鸦,進(jìn)入文件目錄幢痘,通過(guò)maven構(gòu)建項(xiàng)目

mvn -Prelease-all -DskipTests clean install -U

稍等片刻,構(gòu)建成功

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Apache RocketMQ 4.4.0 4.4.0 ........................ SUCCESS [  3.836 s]
[INFO] rocketmq-logging 4.4.0 ............................. SUCCESS [  2.971 s]
[INFO] rocketmq-remoting 4.4.0 ............................ SUCCESS [  2.395 s]
[INFO] rocketmq-common 4.4.0 .............................. SUCCESS [  3.386 s]
[INFO] rocketmq-client 4.4.0 .............................. SUCCESS [  4.092 s]
[INFO] rocketmq-store 4.4.0 ............................... SUCCESS [  2.340 s]
[INFO] rocketmq-srvutil 4.4.0 ............................. SUCCESS [  0.589 s]
[INFO] rocketmq-filter 4.4.0 .............................. SUCCESS [  1.187 s]
[INFO] rocketmq-acl 4.4.0 ................................. SUCCESS [  0.862 s]
[INFO] rocketmq-broker 4.4.0 .............................. SUCCESS [  2.778 s]
[INFO] rocketmq-tools 4.4.0 ............................... SUCCESS [  1.686 s]
[INFO] rocketmq-namesrv 4.4.0 ............................. SUCCESS [  0.986 s]
[INFO] rocketmq-logappender 4.4.0 ......................... SUCCESS [  0.845 s]
[INFO] rocketmq-openmessaging 4.4.0 ....................... SUCCESS [  0.742 s]
[INFO] rocketmq-example 4.4.0 ............................. SUCCESS [  0.843 s]
[INFO] rocketmq-test 4.4.0 ................................ SUCCESS [  1.221 s]
[INFO] rocketmq-distribution 4.4.0 4.4.0 .................. SUCCESS [  6.102 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.160 s
[INFO] Finished at: 2019-02-17T22:26:28+08:00
[INFO] ------------------------------------------------------------------------

進(jìn)入構(gòu)建后的輸出目錄,按順序依次啟動(dòng)Name ServerBroker

cd distribution/target/apache-rocketmq

啟動(dòng)Name Server喊积,nohup表示不掛斷執(zhí)行玄妈,terminal退出時(shí)MQ的進(jìn)程不會(huì)退出

nohup sh bin/mqnamesrv &

查看Name Server 啟動(dòng)日志

tail -f ~/logs/rocketmqlogs/namesrv.log

啟動(dòng)成功

2019-02-23 22:38:09 INFO main - tls.client.keyPath = null
2019-02-23 22:38:09 INFO main - tls.client.keyPassword = null
2019-02-23 22:38:09 INFO main - tls.client.certPath = null
2019-02-23 22:38:09 INFO main - tls.client.authServer = false
2019-02-23 22:38:09 INFO main - tls.client.trustCertPath = null
2019-02-23 22:38:09 INFO main - Using OpenSSL provider
2019-02-23 22:38:10 INFO main - SSLContext created for server
2019-02-23 22:38:10 INFO NettyEventExecutor - NettyEventExecutor service started
2019-02-23 22:38:10 INFO FileWatchService - FileWatchService service started
2019-02-23 22:38:10 INFO main - The Name Server boot success. serializeType=JSON

啟動(dòng)Broker拟蜻,并指定注冊(cè)到Name Server的地址 127.0.0.1:9786

nohup sh bin/mqbroker -n 127.0.0.1:9876 &

查看Broker 啟動(dòng)日志

tail -f ~/logs/rocketmqlogs/broker.log 

啟動(dòng)成功

2019-02-23 22:46:18 WARN main - Load default discard message hook service: DefaultTransactionalMessageCheckListener
2019-02-23 22:46:18 INFO main - The broker dose not enable acl
2019-02-23 22:46:18 INFO FileWatchService - FileWatchService service started
2019-02-23 22:46:18 INFO PullRequestHoldService - PullRequestHoldService service started
2019-02-23 22:46:18 INFO brokerOutApi_thread_1 - register broker to name server 127.0.0.1:9876 OK
2019-02-23 22:46:18 INFO main - Start transaction service!
2019-02-23 22:46:18 INFO main - The broker[zhangjianweideMacBook-Pro.local, 192.168.1.113:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2019-02-23 22:46:28 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2019-02-23 22:46:28 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 415169 bytes
2019-02-23 22:46:28 INFO brokerOutApi_thread_2 - register broker to name server 127.0.0.1:9876 OK

至此瞭郑,RocketMQ的服務(wù)端已全部啟動(dòng)運(yùn)行了鸭你,下面我們將通過(guò)源碼中的示例驗(yàn)證袱巨,讓Producer發(fā)送消息,Consumer來(lái)消費(fèi)消息愉老。

運(yùn)行示例代碼

接下來(lái)我們就可以運(yùn)行示例代碼嫉入,簡(jiǎn)單驗(yàn)證一下服務(wù)端是否啟動(dòng)并開(kāi)始工作。

設(shè)置Name Server 地址到環(huán)境變量熬拒,Producer和Consumer工作時(shí)都會(huì)用到此地址

export NAMESRV_ADDR=127.0.0.1:9876

啟動(dòng)客戶端垫竞,驗(yàn)證發(fā)送與接收消息蛀序,producer和consumer的啟動(dòng)沒(méi)有先后順序徐裸。

啟動(dòng)Producer啸盏,Producer啟動(dòng)后將發(fā)送多條Topic為“TopicTest”的消息,然后自動(dòng)終止進(jìn)程

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId=C0A8017107605E2DE80C765C360003E3, offsetMsgId=C0A8017100002A9F00000000000BCFA1, messageQueue=MessageQueue [topic=TopicTest, brokerName=zhangjianweideMacBook-Pro.local, queueId=0], queueOffset=998]
SendResult [sendStatus=SEND_OK, msgId=C0A8017107605E2DE80C765C360103E4, offsetMsgId=C0A8017100002A9F00000000000BD055, messageQueue=MessageQueue [topic=TopicTest, brokerName=zhangjianweideMacBook-Pro.local, queueId=1], queueOffset=1001]
SendResult [sendStatus=SEND_OK, msgId=C0A8017107605E2DE80C765C360203E5, offsetMsgId=C0A8017100002A9F00000000000BD109, messageQueue=MessageQueue [topic=TopicTest, brokerName=zhangjianweideMacBook-Pro.local, queueId=2], queueOffset=999]
SendResult [sendStatus=SEND_OK, msgId=C0A8017107605E2DE80C765C360303E6, offsetMsgId=C0A8017100002A9F00000000000BD1BD, messageQueue=MessageQueue [topic=TopicTest, brokerName=zhangjianweideMacBook-Pro.local, queueId=3], queueOffset=999]
SendResult [sendStatus=SEND_OK, msgId=C0A8017107605E2DE80C765C360403E7, offsetMsgId=C0A8017100002A9F00000000000BD271, messageQueue=MessageQueue [topic=TopicTest, brokerName=zhangjianweideMacBook-Pro.local, queueId=0], queueOffset=999]
......

啟動(dòng)Consumer,Consumer啟動(dòng)后將訂閱Topic名稱(chēng)為“TopicTest”消息粉怕,持續(xù)監(jiān)聽(tīng)贫贝,收到消息后進(jìn)行消費(fèi),將消息打印輸出

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_1 Receive New Messages: [MessageExt [queueId=0, storeSize=180, queueOffset=983, sysFlag=0, bornTimestamp=1550936154570, bornHost=/192.168.1.113:56251, storeTimestamp=1550936154571, storeHost=/192.168.1.113:10911, msgId=C0A8017100002A9F00000000000BA571, commitLogOffset=763249, bodyCRC=1431313338, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1000, CONSUME_START_TIME=1550936205508, UNIQ_KEY=C0A8017107605E2DE80C765C35CA03A7, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 51, 53], transactionId='null'}]]
ConsumeMessageThread_20 Receive New Messages: [MessageExt [queueId=2, storeSize=180, queueOffset=995, sysFlag=0, bornTimestamp=1550936154615, bornHost=/192.168.1.113:56251, storeTimestamp=1550936154616, storeHost=/192.168.1.113:10911, msgId=C0A8017100002A9F00000000000BC5C9, commitLogOffset=771529, bodyCRC=835257960, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1000, CONSUME_START_TIME=1550936205510, UNIQ_KEY=C0A8017107605E2DE80C765C35F703D5, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 56, 49], transactionId='null'}]]
ConsumeMessageThread_18 Receive New Messages: [MessageExt [queueId=2, storeSize=180, queueOffset=994, sysFlag=0, bornTimestamp=1550936154613, bornHost=/192.168.1.113:56251, storeTimestamp=1550936154614, storeHost=/192.168.1.113:10911, msgId=C0A8017100002A9F00000000000BC2F9, commitLogOffset=770809, bodyCRC=1597161362, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1000, CONSUME_START_TIME=1550936205510, UNIQ_KEY=C0A8017107605E2DE80C765C35F503D1, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 55, 55], transactionId='null'}]]
......

以上就是示例代碼的演示

關(guān)閉服務(wù)端:進(jìn)入安裝目錄中,依次關(guān)閉broker鸳劳、namesrv也搓,如果忘記關(guān)閉,下次啟動(dòng)時(shí)會(huì)提示端口沖突幔摸。

cd distribution/target/apache-rocketmq
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv

小結(jié)

本文介紹了RocketMQ架構(gòu)的主要輪廓颤练,講解如何安裝環(huán)境、運(yùn)行示例代碼患雇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庆亡,一起剝皮案震驚了整個(gè)濱河市捞稿,隨后出現(xiàn)的幾起案子拼缝,更是在濱河造成了極大的恐慌彰亥,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件继阻,死亡現(xiàn)場(chǎng)離奇詭異瘟檩,居然都是意外死亡澈蟆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)睹簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)太惠,“玉大人疲憋,你說(shuō)我怎么就攤上這事∷栽” “怎么了喂击?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵翰绊,是天一觀的道長(zhǎng)旁壮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)裁奇,這世上最難降的妖魔是什么麦撵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任溃肪,我火速辦了婚禮惫撰,結(jié)果婚禮上躺涝,老公的妹妹穿的比我還像新娘。我一直安慰自己夯膀,他們只是感情好苍蔬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布银室。 她就那樣靜靜地躺著,像睡著了一般蜈敢。 火紅的嫁衣襯著肌膚如雪抓狭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天午笛,我揣著相機(jī)與錄音苗桂,去河邊找鬼煤伟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛便锨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姚建,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掸冤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了催烘?” 一聲冷哼從身側(cè)響起缎罢,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤策精,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后咽袜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體询刹,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年沐兰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了住闯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澳淑。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杠巡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氢拥,到底是詐尸還是另有隱情兄一,我是刑警寧澤识腿,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站骂束,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旨枯。R本人自食惡果不足惜混驰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一栖榨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧满粗,春花似錦愚争、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湾戳。三九已至,卻和暖如春砾脑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盅藻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工氏淑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硕噩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓辉懒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親莹汤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颠印,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容