Centos7快速安裝RocketMQ

1. 為什麼要用MQ

消息隊列是一種“先進先出”的數據結構

其應用場景主要包含以下3個方面

  • 應用解耦

系統的耦合性越高,容錯性就越低。以電商應用為例,用戶創建訂單后,如果耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障或者因為升級等原因暫時不可用,都會造成下單操作異常,影響用戶使用體驗。

使用消息隊列解耦合,系統的耦合性就會提高了。比如物流系統發生故障,需要幾分鐘才能來修復,在這段時間內,物流系統要處理的數據被緩存到消息隊列中,用戶的下單操作正常完成。當物流系統回復后,補充處理存在消息隊列中的訂單消息即可,終端系統感知不到物流系統發生過幾分鐘故障。

  • 流量削峰

應用系統如果遇到系統請求流量的瞬間猛增,有可能會將系統壓垮。有了消息隊列可以將大量請求緩存起來,分散到很長一段時間處理,這樣可以大大提到系統的穩定性和用戶體驗。

一般情況,為了保證系統的穩定性,如果系統負載超過閾值,就會阻止用戶請求,這會影響用戶體驗,而如果使用消息隊列將請求緩存起來,等待系統處理完畢后通知用戶下單完畢,這樣總不能下單體驗要好。

處於經濟考量目的:

業務系統正常時段的QPS如果是1000,流量最高峰是10000,為了應對流量高峰配置高性能的服務器顯然不划算,這時可以使用消息隊列對峰值流量削峰

  • 數據分發

通過消息隊列可以讓數據在多個系統更加之間進行流通。數據的產生方不需要關心誰來使用數據,只需要將數據發送到消息隊列,數據使用方直接在消息隊列中直接獲取數據即可

2. MQ的優點和缺點

優點:解耦、削峰、數據分發

缺點包含以下幾點:

  • 系統可用性降低

    系統引入的外部依賴越多,系統穩定性越差。一旦MQ宕機,就會對業務造成影響。

    如何保證MQ的高可用?

  • 系統複雜度提高

    MQ的加入大大增加了系統的複雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。

    如何保證消息沒有被重複消費?怎麼處理消息丟失情況?那麼保證消息傳遞的順序性?

  • 一致性問題

    A系統處理完業務,通過MQ給B、C、D三個系統發消息數據,如果B系統、C系統處理成功,D系統處理失敗。

    如何保證消息數據處理的一致性?

3. 各種MQ產品的比較

常見的MQ產品包括KafkaActiveMQRabbitMQRocketMQ

4. 安裝RocketMQ

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

4.1 下載RocketMQ

RocketMQ最新版本:4.5.1

下載地址

4.2 環境要求

  • Linux64位系統

  • JDK1.8(64位)

yum install java-1.8.0-openjdk* -y

  • 源碼安裝需要安裝Maven 3.2.x

4.3 二進制包方式安裝RocketMQ

本教程以二進制包方式安裝

  1. 解壓安裝包
  2. 進入安裝目錄

目錄介紹

  • bin:啟動腳本,包括shell腳本和CMD腳本
  • conf:實例配置文件 ,包括broker配置文件、logback配置文件等
  • lib:依賴jar包,包括Nettycommons-langFastJSON

4.4 啟動RocketMQ

  1. 啟動NameServer
# 1.啟動NameServer
nohup sh bin/mqnamesrv &
# 2.查看啟動日誌
tail -f ~/logs/rocketmqlogs/namesrv.log

  1. 啟動Broker
# 1.啟動Broker
nohup sh bin/mqbroker -n localhost:9876 &
# 2.查看啟動日誌
tail -f ~/logs/rocketmqlogs/broker.log 

  • 問題描述:

    RocketMQ默認的虛擬機內存較大,啟動Broker如果因為內存不足失敗,需要編輯如下兩個配置文件,修改JVM內存大小

# 編輯runbroker.sh和runserver.sh修改默認JVM大小
vi runbroker.sh
vi runserver.sh
  • 參考設置:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m  -XX:MaxMetaspaceSize=320m"

5 測試RocketMQ

5.1 發送消息

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

5.2 接收消息

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

6. 關閉RocketMQ

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

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

【其他文章推薦】

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

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家公司費用怎麼算?