【RocketMQ】1. MQ知識概要以及快速入門

1.RocketMQ介紹

1.1爲什麼要用MQ

消息隊列是一種“先進先出”的數據結構
在這裏插入圖片描述
其應用場景主要包含以下三個方面

應用解耦

系統的耦合性越高,容錯性就約低。以電商應用爲例子,用戶創建訂單後,如果耦合調用庫存系統、物流系統、支付系統、任何一個子系統出了故障或者因爲升級等原因暫時不可用,都會造成下單操作異常,影響用戶使用體驗
在這裏插入圖片描述
使用消息隊列解耦,系統耦合性就會提高。比如物流系統發生故障,需要幾分鐘才能修復,這段時間內,物流系統要處理的數據被緩存到消息隊列中,用戶的下單操作正常完成。當物流系統回覆後,補充處理存在消息隊列中的訂單消息即可,中斷系統感知不到物流系統發生過幾分鐘故障。
在這裏插入圖片描述

流量削峯

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

在這裏插入圖片描述
一般情況,爲了保證系統的穩定性,如果系統負載超過閾值,就會組織用戶請求,這樣會影響用戶體驗,而如果使用消息隊列將請求緩存起來,等待系統處理完畢後通知用戶下單完畢,這樣總不能下單體驗要好。

處於經濟考量目的:
業務系統正常時間段的QPS如果是1000,流量高峯時10000,爲了應對流量高峯配置高性能的服務器顯然不划算,這時可以使用消息隊列對峯值流量削峯。
數據分發
在這裏插入圖片描述
通過消息隊列可以讓數據在多個系統更加之間進行流通。數據的產生方不需要關心誰來使用數據,只需要將數據發送到消息碎裂,數據使用方直接在消息隊列中直接獲取數據即可
在這裏插入圖片描述

1.2 MQ的優點和缺點

優點:解耦、削峯、數據分發
缺點包含以下幾點

  • 系統可用性降低
    系統引入的外部依賴越多,系統穩定性越差。一旦MQ宕機,就會對業務造成影響
    如何保證MQ的高可用
  • 系統複雜度提高
    MQ的加入大大增加了系統的複雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。如何保證消息沒有被重複消費?怎麼處理消息丟失情況?那麼保證消息傳遞的順序性?
  • 一致性問題
    A系統處理完業務,通過MQ給B、C、D三個系統發消息數據,如果B系統、C系統處理成功,D系統處理失敗。如何保證消息數據處理的一致性?
1.3各種MQ產品的比較

常見的MQ產品包括Kafka、ActiveMQ RabbitMq PocketMQ
在這裏插入圖片描述
在這裏插入圖片描述

2. RocketMQ 快速入門

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

2.1 準備工作

下載安裝RocketMQ

2.2 啓動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內存大小

編輯runbrocker.sh 和runserver.sh修改默認JVM大小
vi runbroker.sh
vi runserver.sh

  • 參考設置
    在這裏插入圖片描述
2.3 測試RocketMQ

發送消息

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

接受消息

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

關閉RocketMQ

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章