RocketMQ(1)—架構原理及環境搭建

一、架構簡述

RocketMQ阿里開源的一個分佈式消息傳遞和流媒體平台,具有低延遲,高性能和可靠性, 萬億級容量和靈活的可伸縮性。跟其它中間件相比,RocketMQ的特點是JAVA實現,在發生宕機和其它故障時消息丟失率更低

它由四個部分組成:nameserver,broker,生產者和消費者。它們中的每一個都可以水平擴展,而沒有單個故障點。  

Nameserver:提供輕量級的服務發現和路由。生產者和消費者通過nameserver獲取broker信息。它幾乎是無狀態的,nameserver結點之間沒有任何的數據同步,broker註冊信息時會註冊到每一個nameserver結點上面,所以每個nameserver節點都記錄了完整broker信息,提供相應的讀寫服務,並支持快速的存儲擴展。

Broker:通過提供輕量級的topic和queue機制來存儲消息。與nameserver中的每個節點建立長連接,定時註冊topic等信息到nameserver上面。broker一般都是主從模式,因為消息是真實存儲消息的地方,避免一個結點掛了,導致這個節點數據全部丟失。

Producer:與nameserver集群中的一個結點建立長連接,定期的拉取broker 的topic路由信息,再將消息發送到對應broker的topic上面

Consumer:與nameserver集群中的一個結點建立長連接,定期的拉取broker 的topic路由信息,再去消費對應broker的topic信息

 

 

二、環境搭建

 1.官網下載:http://rocketmq.apache.org/release_notes/release-notes-4.7.0/

2.解壓 unzip rocketmq-all-4.7.0-bin-release.zip

3.修改啟動參數配置。默認的jvm參數內存設置特別大,如果自己機器不行的話需要手動改下bin目錄下的啟動參數文件:runbroker.sh 和runserver.sh文件 我的虛擬機內存分配不大,改成256m 256m 128m

   這是默認的

 

 

4.啟動nameserver: nohup sh mqnamesrv ‐n 192.168.0.67:9876 &   (將日誌輸出當前目錄的nohub.out文件,方便查看啟動日誌,ip是當前機器的ip)

 

 

 

 5.啟動broker:nohup sh mqbroker ‐n 192.168.0.67:9876 autoCreateTopicEnable=true &  (autoCreateTopicEnable=true 自動創建topic,如果不設置true的話,生產者發送消息的時候如果沒有topic就會發送失敗,需要提前把topic創建好,設置true會在發送時自動創建topic,192.168.0.67:9876 是name server)

也可以使用配置文件啟動broker:nohup sh mqbroker ‐n 192.168.0.67:9876 ‐c conf/broker.conf &

簡單看下默認的配置文件中的一些參數:

#集群名字
brokerClusterName = DefaultCluster
#broker名字,集群中主從都要用這個名字,才會組成一個集群
brokerName = broker-a
#id為0的是master  非0的slava
brokerId = 0
#消息處理時間,凌晨4點
deleteWhen = 04
#消息保存時間默認48小時,48小時之後的凌晨4點就會清理
fileReservedTime = 48
#集群主從之間數據同步方式 
#異步只需要發到master成功就返回客戶端段成功,性能高,但是如果master掛了 slave還未同步就會丟失消息。根據自身業務場景選擇合適方式
brokerRole = ASYNC_MASTER
#消息刷盤機制,和主從數據同步類似,同步就是說需要寫進磁盤了才返回成功。異步就是寫進內存了就返回成功,後面再去落盤。
flushDiskType = ASYNC_FLUSH
#自動創建topic
autoCreateTopicEnable=true

使用配置文件啟動:nohup sh bin/mqbroker ‐n 192.168.0.67:9876 -c conf/broker.conf &

broker 192.168.0.67:10911關聯的nameserver是192.168.0.67:9876

 

 

至此一個單機的rocketMQ的環境就搭建好了   正常退出: sh mqshutdown broker  和  sh mqshutdown namesrv

 

測試下消息發送,使用rocketMQ提供的測試腳本:

export NAMESRV_ADDR=192.168.0.67:9876

生產者腳本

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer 消費者腳本

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer 發送消息:  

 

 消費消息:

 

三、控制台搭建

1.下載rocketMQ的擴展包,master分支:https://github.com/apache/rocketmq-external 

 2.啟動rocketmq-console-ng模塊

 

 3.修改此模塊配置:

  3.1 maven依賴rocketMQ版本改成自己部署版本對應的,我部署的MQ是最新的4.7.0版本

 

 

  3.2 配置文件中配置namserver地址和控制台數據存放地址

 

 正常來說改完這兩個地方就可以直接啟動控制台的這個springboot程序了。

但是因為我用的MQ是最新的4.7版本,控制台對應的還沒有更新到最新的。編譯都有會報錯的地方

1.DefaultMQPullConsumer這個類已經不推薦使用了,並且4.7.0中有兩個類似的構造器,原來代碼直接傳了一個null,第二個參數無法識別是哪個構造器的。修改下把第二參數強轉String或者RPCHook

 

 

2.MQAdminExt這個接口中加了新方法,但是控制台中MQAdminExtImpl還沒有實現對應的方法。這個問題在github上幾天前已經有人提了Issues了,我這裡是自己添加一下默認實現然後服務就可以正常啟動了,還不確定後續後面有什麼影響沒有,至少可以啟動了

 

 

 

 

之前使用測試腳本發送的消息 以及topic都可以在控制台看到了

 

 

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化