RocketMQ 介紹與安裝

Juno3550發表於2022-01-15


RocketMQ 介紹

MQ 介紹

定義

  • MQ(Message Queue,訊息佇列)是一種用來儲存訊息資料的佇列。

  • 佇列:資料結構的一種,特徵為“先進先出”。

image

image

MQ 作用

  • 應用解耦

  • 快速的應用變更和維護

  • 流量削鋒(削峰填谷)

MQ 缺點

  • 系統可用性降低(解決:搭叢集)
  • 系統複雜度提高(解決:程式設計師提升水平)
  • 非同步訊息機制(以下都有解決方案)
    • 訊息時序性
    • 訊息丟失
    • 訊息一致性
    • 訊息重複使用

MQ 常見產品

  • ActiveMQ :Java 語言實現,萬級資料吞吐量,處理速度 ms 級,主從架構,成熟度高。
  • RabbitMQ :Erlang 語言實現,萬級資料吞吐量,處理速度 us 級,主從架構。
  • RocketMQJava 語言實現,十萬級資料吞吐量,處理速度 ms 級,分散式架構,功能強大,擴充套件性強
  • kafka :Scala 語言實現,十萬級資料吞吐量,處理速度 ms 級,分散式架構,功能較少,應用於大資料較多。

RocketMQ 簡介

RocketMQ 是阿里開源的一款非常優秀中介軟體產品,脫胎於阿里的另一款佇列技術 MetaQ,後捐贈給 Apache 基金會作為一款孵化技術,僅僅經歷了一年多的時間就成為 Apache 基金會的頂級專案。並且現在已經在阿里內部被廣泛應用,且經受住了多次雙十一的這種極致場景的壓力(2017 年的雙十一,RocketMQ 流轉的訊息量達到了萬億級,峰值 TPS 達到 5600 萬)。

同時,它還解決了上述提到的所有的訊息佇列的缺點。

RocketMQ 架構


RocketMQ 安裝

1)安裝 JDK

2)解壓 RocketMQ 安裝包下載地址):unzip rocketmq-all-4.5.2-bin-release.zip

3)修改目錄名稱:mv rocketmq-all-4.5.2-bin-release rocketmq

4)調整 RocketMQ 的啟動記憶體

  • RocketMQ 的預設記憶體佔用非常高,一般需要 4-8G 的虛擬機器 JVM 引數空間,因此可以通過更改 mqbroker 和 mqnamesrv 的配置來調整記憶體(調整的與當前虛擬機器記憶體匹配即可,推薦 256m-128m)。

  • RocketMQ 有兩個啟動指令碼:bin 目錄下的 runbroker.sh 和 runserver.sh,編輯如下內容,然後重新啟動 broker 。

# vi runserver.sh
JAVA_OPT=”${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”

# vi runbroker.sh
JAVA_OPT=”${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn125m
  • mqbroker 和 mqnamesrv 的記憶體也可以調整,這兩項配置也很重要,預設是 500m 到 1g 。具體檔案配置是 mqbroker.xml 和mqnamesrv.xml(檔案裡面的配置資訊根據自己的情況修改):
<options>
         <-Xms200m></-Xms200m>
         <-Xmx200m></-Xmx200m>
         <-XX:NewSize>50M</-XX:NewSize>
         <-XX:MaxNewSize>50M</-XX:MaxNewSize>
         <-XX:PermSize>30M</-XX:PermSize>
         <-XX:MaxPermSize>30M</-XX:MaxPermSize>
 </options>
  • 注意:mqbroker.xml 和 mqnamesrv.xml 的記憶體不要超過 runbroker.sh 和runserver.sh 的記憶體,不然會因為記憶體不夠導致崩潰。

**5)修改服務 IP **:

# vi conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUS
# 新增以下兩行內容,將IP地址改為本地虛擬機器
# 若不增加以下內容,則MQ伺服器地址將預設為公網 172.17.0.1:10911
brokerIP1 = 192.168.3.244
namesrvAddr = 192.168.3.244:9876

6)bin 目錄下啟動命名服務

# 顯式啟動命名服務(預設埠 9876)
sh mqnamesrv
# 後臺啟動
nohup sh mqnamesrv &
# 可以在當前目錄的 nohup.out 中檢視日誌輸出

7)bin 目錄下啟動訊息服務

# 顯式啟動訊息服務,並指定命名服務的地址
sh mqbroker -n localhost:9876
# 後臺啟動
nohup sh mqbroker -n localhost:9876 &
# 指定配置檔案
sh mqbroker -n localhost:9876 -c ../conf/broker.conf
# 可以在當前目錄的 nohup.out 中檢視日誌輸出

8)關閉防火牆(供客戶端程式訪問):

# 暫時關閉防火牆
systemctl stop firewalld

# 永久設定防火牆狀態
systemctl enable firewalld.service  # 開啟
systemctl disable firewalld.service  # 關閉

9)測試

# 配置命名服務地址
export NAMESRV_ADDR=localhost:9876
# 啟動後產生大量日誌資訊(該資訊是測試程式中自帶的,不具有通用性)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
# 啟動後產生大量日誌資訊(該資訊是測試程式中自帶的,不具有通用性)
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

相關文章