Centos7快速安裝RocketMQ

1. 爲何要用MQ

消息隊列是一種「先進先出」的數據結構java

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

  • 應用解耦

系統的耦合性越高,容錯性就越低。以電商應用爲例,用戶建立訂單後,若是耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障或者由於升級等緣由暫時不可用,都會形成下單操做異常,影響用戶使用體驗。apache

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

  • 流量削峯

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

通常狀況,爲了保證系統的穩定性,若是系統負載超過閾值,就會阻止用戶請求,這會影響用戶體驗,而若是使用消息隊列將請求緩存起來,等待系統處理完畢後通知用戶下單完畢,這樣總不能下單體驗要好。數據結構

處於經濟考量目的:併發

業務系統正常時段的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
相關文章
相關標籤/搜索