1. 程式人生 > 程式設計 >Apache RocketMQ 訊息佇列部署與視覺化介面安裝

Apache RocketMQ 訊息佇列部署與視覺化介面安裝

一、介紹

Apache RocketMQ是一個分散式、佇列模型的訊息中介軟體,具有低延遲、高效能和高可靠、萬億級容量和靈活的可擴充套件性。核心元件由四部分組成:Name ServersBrokersProducerConsumer;它們中的每一個都可以水平擴充套件,而沒有單一的故障節點。

file

  1. NameServer:是一個幾乎無狀態的節點,可叢集部署,節點之間無任何資訊同步
  2. Broker:部署相對複雜,Broker分為Master與Slave,一個Master可以對應多個Slaver,但是一個Slaver只能對應一個Master,Master與Slaver的對應關係通過指定相同的BrokerName,不同的BrokerId來定義,BrokerId為0表示Master,非0表示Slaver。Master可以部署多個。每個Broker與NameServer叢集中的所有節點建立長連線,定時註冊Topic資訊到所有的NameServer
  3. Producer:與NameServer叢集中的其中一個節點(隨機選擇)建立長連線,定期從NameServer取Topic路由資訊,並向提供Topic服務的Master建立長連線,且定時向Master傳送心跳。Produce完全無狀態,可叢集部署
  4. Consumer:與NameServer叢集中的其中一個節點(隨機選擇)建立長連線,定期從NameServer取Topic路由資訊,並向提供Topic服務的Master、Slaver建立長連線,且定時向Master、Slaver傳送心跳。Consumer即可從Master訂閱訊息,也可以從Slave訂閱訊息,訂閱規則由Broker配置決定

 

二、MQ安裝部署

2.1. 下載

直接找最新版下載後解壓 rocketmq.apache.org/release_not…

file

 

2.2. 修改配置

修改 conf/broker.conf 新增以下配置

file

brokerIP1:配置broker所在伺服器的ip地址,以便Name Server連線

  修改 runserver.shrunbroker.sh (可不改) 因為rocketMQ預設的啟動引數記憶體佔用非常大,如果環境沒有這麼多記憶體就必需修改JAVA_OPT引數

  • runserver.sh
    file
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
複製程式碼
  • runbroker.sh
    file
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
複製程式碼

 

2.3. 執行Name Server

nohup sh bin/mqnamesrv &
複製程式碼

檢視執行日誌:tail -f ~/logs/rocketmqlogs/namesrv.log

 

2.4. 執行Broker

nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
複製程式碼

通過-c引數指定配置檔案 檢視執行日誌:tail -f ~/logs/rocketmqlogs/broker.log

 

2.5. 停止服務的方式

如果需要停止RocketMQ的服務,在生產環境不建議直接用kill,應該使用以下命令

sh bin/mqshutdown broker

sh bin/mqshutdown namesrv
複製程式碼

 

三、安裝視覺化管理介面

mvn clean package -Dmaven.test.skip=true
複製程式碼
  • 執行
nohup java -jar \
    -Drocketmq.config.namesrvAddr=192.168.28.130:9876 \
    -Drocketmq.config.isVIPChannel=false \
    rocketmq-console-ng-1.0.0.jar &
複製程式碼

 

四、常見異常處理

4.1. MQClientException: No route info of this topic,TopicTest1

4.1.1. 異常說明

在客戶端的 Producer 執行起來準備傳送訊息時拋異常為 “ No route info of this topic ” 異常產生的原因可能是:

  1. Broker 禁止自動建立 Topic,且使用者沒有通過手工方式建立 Topic
  2. Broker 沒有正確連線到 Name Server
  3. Producer 沒有正確連線到 Name Server

 

4.1.2. 解決辦法

  • 排查1Broker 禁止自動建立 Topic,且使用者沒有通過手工方式建立 Topic
    • 可以在rocketmq所在目錄下執行 " sh bin/mqbroker -m " 來檢視 broker 的配置引數
    • 如下所示,autoCreateTopicEnable=true 證明是沒有問題的
      file

 

  • 排查2Broker 沒有正確連線到 Name Server 通過檢視broker的日誌 tail -f ~/logs/rocketmqlogs/broker.log 看看有沒有錯誤資訊

 

  • 排查3Producer 沒有正確連線到 Name Server
    1. 檢查程式連線 Name Server 的地址有沒有錯
    2. 如果在雲伺服器上,檢查安全組的配置9876埠有沒有開發
    3. 看看有沒有開啟防火牆,有的話設定防火牆開放9876bash [root@zlt rocketmq-all-4.5.0-bin-release]# firewall-cmd --zone=public --list-ports 8090/tcp 80/tcp 8080/tcp [root@zlt rocketmq-all-4.5.0-bin-release]# firewall-cmd --zone=public --add-port=9876/tcp --permanent success [root@zlt rocketmq-all-4.5.0-bin-release]# firewall-cmd --reload success [root@zlt rocketmq-all-4.5.0-bin-release]# firewall-cmd --zone=public --list-ports 9876/tcp 8090/tcp 80/tcp 8080/tcp

 

4.2. RemotingTooMuchRequestException: sendDefaultImpl call timeout

4.2.1. 異常說明

  • 在客戶端的 Producer 執行起來準備傳送訊息時拋異常如下
  • 通常因為Name Server連線不上Broker
    file

 

4.2.2. 解決辦法

檢查 rocketmq-console 的叢集頁籤,broker 的地址是否正確

file
broker地址的配置方式請參考 安裝部署 中提到的步驟:

  1. 修改 broker.conf 的配置,新增 brokerIP1 引數
  2. 啟動 broker 時加上 -c 引數指定配置檔案

 

4.3. 消費/檢視不了死信佇列topic的訊息

file

4.3.1. 異常說明

死信佇列預設的 perm 值為2沒有檢視許可權  

4.3.2. 解決辦法

在控制檯把佇列的 perm 改為6就可以了 **主題點選 TOPIC配置 **

file
修改perm
file

 

推薦閱讀

  掃碼關注有驚喜!

file