RocketMQ教程

簡介

RocketMQ 是阿里巴巴在2012年開源的分佈式消息中間件,目前已經捐贈給 Apache 軟件基金會,並於2017年9月25日成爲 Apache 的頂級項目。
作爲經歷過多次阿里巴巴雙十一這種“超級工程”的洗禮並有穩定出色表現的國產中間件,以其高性能、低延時和高可靠等特性近年來已經也被越來越多的國內企業使用。

官網:http://rocketmq.apache.org/
阿里雲:https://www.aliyun.com/product/rocketmq?spm=5176.10695662.746107.1.60ee251covIvTm

安裝

http://rocketmq.apache.org/docs/quick-start/
https://liuyanzhao.com/9678.html

環境變量設置mac爲例:
vim ~/.bash_profile

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH

source ~/.bash_profile

修改 runserver.sh 和 runbroker.sh 的 jvm 參數中的堆大小
修改 bin/runserver.sh 和 bin/runbroker.sh 文件
在這裏插入圖片描述
如圖,可以把8g改成2g,4g改成1g

啓動nameserver

在這裏插入圖片描述

啓動broker

在這裏插入圖片描述
Shutdown Servers

sh bin/mqshutdown broker
The mqbroker(36695) is running…
Send shutdown request to mqbroker(36695) OK

sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running…
Send shutdown request to mqnamesrv(36664) OK

特點

  • 高性能,分佈式
  • 高併發
  • 消息堆積

核心概念

  • Topic:消息主題,一級消息類型,生產者向其發送消息。
  • 生產者:也稱爲消息發佈者,負責生產併發送消息至 Topic。
  • 消費者:也稱爲消息訂閱者,負責從 Topic 接收並消費消息。
  • 消息:生產者向 Topic 發送並最終傳送給消費者的數據和(可選)屬性的組合。
  • 消息屬性:生產者可以爲消息定義的屬性,包含 Message Key 和 Tag。
  • Group:一類生產者或消費者,這類生產者或消費者通常生產或消費同一類消息,且消息發佈或訂閱的邏輯一致。

原理(通用性)

消息收發模型

  • 生產者集羣:用來表示發送消息應用,一個生產者集羣下包含多個生產者實例,可以是多臺機器,也可以是一臺機器的多個進程,或者一個進程的多個生產者對象。
    一個生產者集羣可以發送多個 Topic 消息。發送分佈式事務消息時,如果生產者中途意外宕機,Broker 會主動回調生產者集羣的任意一臺機器來確認事務狀態。

  • 消費者集羣:用來表示消費消息應用,一個消費者集羣下包含多個消費者實例,可以是多臺機器,也可以是多個進程,或者是一個進程的多個消費者對象。
    一個消費者集羣下的多個消費者以均攤方式消費消息。如果設置的是廣播方式,那麼這個消費者集羣下的每個實例都消費全量數據。

  • 一個消費者集羣對應一個 Group ID,一個 Group ID 可以訂閱多個 Topic,如圖 1 中的 Group 2 所示。Group 和 Topic 的訂閱關係可以通過直接在程序中設置即可,具體設置方法可參見產品更新日誌中的資源申請流程優化部分。
    在這裏插入圖片描述

概念模型

在這裏插入圖片描述

部署模型

在這裏插入圖片描述

在這裏插入圖片描述

應用場景

在這裏插入圖片描述

  • 削峯填谷
    諸如秒殺、搶紅包、企業開門紅等大型活動時皆會帶來較高的流量脈衝,或因沒做相應的保護而導致系統超負荷甚至崩潰,或因限制太過導致請求大量失敗而影響用戶體驗,消息隊列 RocketMQ 版可提供削峯填谷的服務來解決該問題。

  • 異步解耦
    交易系統作爲淘寶/天貓主站最核心的系統,每筆交易訂單數據的產生會引起幾百個下游業務系統的關注,包括物流、購物車、積分、流計算分析等等,整體業務系統龐大而且複雜,消息隊列 RocketMQ 版可實現異步通信和應用解耦,確保主站業務的連續性。

  • 順序收發
    細數日常中需要保證順序的應用場景非常多,例如證券交易過程時間優先原則,交易系統中的訂單創建、支付、退款等流程,航班中的旅客登機消息處理等等。與先進先出(First In First Out,縮寫 FIFO)原理類似,消息隊列 RocketMQ 版提供的順序消息即保證消息 FIFO。

  • 分佈式事務一致性
    交易系統、支付紅包等場景需要確保數據的最終一致性,大量引入消息隊列 RocketMQ 版的分佈式事務,既可以實現系統之間的解耦,又可以保證最終的數據一致性。

  • 大數據分析
    數據在“流動”中產生價值,傳統數據分析大多是基於批量計算模型,而無法做到實時的數據分析,利用阿里雲消息隊列 RocketMQ 版與流式計算引擎相結合,可以很方便的實現將業務數據進行實時分析。

  • 分佈式緩存同步
    天貓雙 11 大促,各個分會場琳琅滿目的商品需要實時感知價格變化,大量併發訪問數據庫導致會場頁面響應時間長,集中式緩存因爲帶寬瓶頸限制商品變更的訪問流量,通過消息隊列 RocketMQ 版構建分佈式緩存,實時通知商品數據的變化。

demo項目

創建項目:https://start.spring.io/

在這裏插入圖片描述

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