RocketMQ 入門實戰(1)--簡介

来源:https://www.cnblogs.com/wuyongyin/archive/2023/08/27/17568349.html
-Advertisement-
Play Games

RocketMQ 是一個純 Java、分散式、隊列模型的開源消息中間件;前身是 MetaQ,是阿裡參考 Kafka 研發的一個隊列模型的消息中間件,後開源給 Apache 基金會併成為 Apache 的頂級項目,具有高性能、高可靠、高實時、分散式的特點。 1、基本概念 1.1、主題(Topic) A ...


RocketMQ 是一個純 Java、分散式、隊列模型的開源消息中間件;前身是 MetaQ,是阿裡參考 Kafka 研發的一個隊列模型的消息中間件,後開源給 Apache 基金會併成為 Apache 的頂級項目,具有高性能、高可靠、高實時、分散式的特點。

1、基本概念

1.1、主題(Topic)

Apache RocketMQ 中消息傳輸和存儲的頂層容器,用於標識同一類業務邏輯的消息。主題通過 TopicName 來做唯一標識和區分。

1.2、消息類型(MessageType)

Apache RocketMQ 中按照消息傳輸特性的不同而定義的分類,用於類型管理和安全校驗。 Apache RocketMQ 支持的消息類型有普通消息、順序消息、事務消息和定時/延時消息。

註:Apache RocketMQ 從 5.0 版本開始,支持強制校驗消息類型,即每個主題 Topic 只允許發送一種消息類型的消息,這樣可以更好的運維和管理生產系統,避免混亂。但同時保證向下相容 4.x 版本行為,強制校驗功能預設關閉,推薦通過服務端參數 enableTopicMessageTypeCheck 手動開啟校驗。

1.3、消息隊列(MessageQueue)

隊列是 Apache RocketMQ 中消息存儲和傳輸的實際容器,也是消息的最小存儲單元。 Apache RocketMQ 的所有主題都是由多個隊列組成,以此實現隊列數量的水平拆分和隊列內部的流式存儲。隊列通過QueueId 來做唯一標識和區分。

1.4、消息(Message)

消息是 Apache RocketMQ 中的最小數據傳輸單元。生產者將業務數據的負載和拓展屬性包裝成消息發送到服務端,服務端按照相關語義將消息投遞到消費端進行消費。

1.5、消息視圖(MessageView)

消息視圖是 Apache RocketMQ 面向開發視角提供的一種消息只讀介面。通過消息視圖可以讀取消息內部的多個屬性和負載信息,但是不能對消息本身做任何修改。

1.6、消息標簽(MessageTag)

消息標簽是 Apache RocketMQ 提供的細粒度消息分類屬性,可以在主題層級之下做消息類型的細分。消費者通過訂閱特定的標簽來實現細粒度過濾。

1.7、消息位點(MessageQueueOffset)

消息是按到達 Apache RocketMQ 服務端的先後順序存儲在指定主題的多個隊列中,每條消息在隊列中都有一個唯一的 Long 類型坐標,這個坐標被定義為消息位點。

1.8、消費位點(ConsumerOffset)

一條消息被某個消費者消費完成後不會立即從隊列中刪除,Apache RocketMQ 會基於每個消費者分組記錄消費過的最新一條消息的位點,即消費位點。

1.9、消息索引(MessageKey)

消息索引是 Apache RocketMQ 提供的面向消息的索引屬性。通過設置的消息索引可以快速查找到對應的消息內容。

1.10、生產者(Producer)

生產者是 Apache RocketMQ 系統中用來構建並傳輸消息到服務端的運行實體。生產者通常被集成在業務系統中,將業務消息按照要求封裝成消息併發送至服務端。

1.11、事務檢查器(TransactionChecker)

Apache RocketMQ 中生產者用來執行本地事務檢查和異常事務恢復的監聽器。事務檢查器應該通過業務側數據的狀態來檢查和判斷事務消息的狀態。

1.12、事務狀態(TransactionResolution)

Apache RocketMQ 中事務消息發送過程中,事務提交的狀態標識,服務端通過事務狀態控制事務消息是否應該提交和投遞。事務狀態包括事務提交、事務回滾和事務未決。

1.13、消費者分組(ConsumerGroup)

消費者分組是 Apache RocketMQ 系統中承載多個消費行為一致的消費者的負載均衡分組。和消費者不同,消費者分組並不是運行實體,而是一個邏輯資源。在 Apache RocketMQ 中,通過消費者分組內初始化多個消費者實現消費性能的水平擴展以及高可用容災。

1.14、消費者(Consumer)

消費者是 Apache RocketMQ 中用來接收並處理消息的運行實體。消費者通常被集成在業務系統中,從服務端獲取消息,並將消息轉化成業務可理解的信息,供業務邏輯處理。

1.15、消費結果(ConsumeResult)

Apache RocketMQ 中 PushConsumer 消費監聽器處理消息完成後返回的處理結果,用來標識本次消息是否正確處理。消費結果包含消費成功和消費失敗。

1.16、訂閱關係(Subscription)

訂閱關係是 Apache RocketMQ 系統中消費者獲取消息、處理消息的規則和狀態配置。訂閱關係由消費者分組動態註冊到服務端系統,併在後續的消息傳輸中按照訂閱關係定義的過濾規則進行消息匹配和消費進度維護。

1.17、消息過濾

消費者可以通過訂閱指定消息標簽(Tag)對消息進行過濾,確保最終只接收被過濾後的消息合集。過濾規則的計算和匹配在 Apache RocketMQ 的服務端完成。

1.18、重置消費位點

以時間軸為坐標,在消息持久化存儲的時間範圍內,重新設置消費者分組對已訂閱主題的消費進度,設置完成後消費者將接收設定時間點之後,由生產者發送到 Apache RocketMQ 服務端的消息。

1.19、消息軌跡

在一條消息從生產者發出到消費者接收並處理過程中,由各個相關節點的時間、地點等數據匯聚而成的完整鏈路信息。通過消息軌跡,您能清晰定位消息從生產者發出,經由 Apache RocketMQ 服務端,投遞給消費者的完整鏈路,方便定位排查問題。

1.20、消息堆積

生產者已經將消息發送到 Apache RocketMQ 的服務端,但由於消費者的消費能力有限,未能在短時間內將所有消息正確消費掉,此時在服務端保存著未被消費的消息,該狀態即消息堆積。

1.21、事務消息

事務消息是 Apache RocketMQ 提供的一種高級消息類型,支持在分散式場景下保障消息生產和本地事務的最終一致性。

1.22、定時/延時消息

定時/延時消息是 Apache RocketMQ 提供的一種高級消息類型,消息被髮送至服務端後,在指定時間後才能被消費者消費。通過設置一定的定時時間可以實現分散式場景的延時調度觸發效果。

1.23、順序消息

順序消息是 Apache RocketMQ 提供的一種高級消息類型,支持消費者按照發送消息的先後順序獲取消息,從而實現業務場景中的順序處理。

2、領域模型

Apache RocketMQ 是一款典型的分散式架構下的中間件產品,使用非同步通信方式和發佈訂閱的消息傳輸模型。 Apache RocketMQ 產品具備非同步通信的優勢,系統拓撲簡單、上下游耦合較弱,主要應用於非同步解耦,流量削峰填谷等場景。

2.1、Apache RocketMQ 領域模型

Apache RocketMQ 中消息的生命周期主要分為消息生產、消息存儲、消息消費這三部分。生產者生產消息併發送至 Apache RocketMQ 服務端,消息被存儲在服務端的主題中,消費者通過訂閱主題消費消息。

2.1.1、消息生產

生產者(Producer):Apache RocketMQ 中用於產生消息的運行實體,一般集成於業務調用鏈路的上游。生產者是輕量級匿名無身份的。

2.1.2、消息存儲

主題(Topic):Apache RocketMQ 消息傳輸和存儲的分組容器,主題內部由多個隊列組成,消息的存儲和水平擴展實際是通過主題內的隊列實現的。
隊列(MessageQueue):Apache RocketMQ 消息傳輸和存儲的實際單元容器,類比於其他消息隊列中的分區。 Apache RocketMQ 通過流式特性的無限隊列結構來存儲消息,消息在隊列內具備順序性存儲特征。
消息(Message):Apache RocketMQ 的最小傳輸單元。消息具備不可變性,在初始化發送和完成存儲後即不可變。

2.1.3、消息消費

消費者分組(ConsumerGroup):Apache RocketMQ 發佈訂閱模型中定義的獨立的消費身份分組,用於統一管理底層運行的多個消費者(Consumer)。同一個消費組的多個消費者必須保持消費邏輯和配置一致,共同分擔該消費組訂閱的消息,實現消費能力的水平擴展。
消費者(Consumer):Apache RocketMQ 消費消息的運行實體,一般集成在業務調用鏈路的下游。消費者必須被指定到某一個消費組中。
訂閱關係(Subscription):Apache RocketMQ 發佈訂閱模型中消息過濾、重試、消費進度的規則配置。訂閱關係以消費組粒度進行管理,消費組通過定義訂閱關係控制指定消費組下的消費者如何實現消息過濾、消費重試及消費進度恢復等。Apache RocketMQ 的訂閱關係除過濾表達式之外都是持久化的,即服務端重啟或請求斷開,訂閱關係依然保留。

2.2、通信方式介紹

分散式系統架構思想下,將複雜系統拆分為多個獨立的子模塊,例如微服務模塊。此時就需要考慮子模塊間的遠程通信,典型的通信模式分為以下兩種,一種是同步的 RPC 遠程調用;一種是基於中間件代理的非同步通信方式。

2.2.1、同步RPC調用模型

同步 RPC 調用模型下,不同系統之間直接進行調用通信,每個請求直接從調用方發送到被調用方,然後要求被調用方立即返迴響應結果給調用方,以確定本次調用結果是否成功。
註意:此處的同步並不代表 RPC 的編程介面方式,RPC 也可以有非同步非阻塞調用的編程方式,但本質上仍然是需要在指定時間內得到目標端的直接響應。

2.2.2、非同步通信模型

非同步消息通信模式下,各子系統之間無需強耦合直接連接,調用方只需要將請求轉化成非同步事件(消息)發送給中間代理,發送成功即可認為該非同步鏈路調用完成,剩下的工作中間代理會負責將事件可靠通知到下游的調用系統,確保任務執行完成。該中間代理一般就是消息中間件。

非同步通信的優勢如下:
1、系統拓撲簡單。由於調用方和被調用方統一和中間代理通信,系統是星型結構,易於維護和管理。
2、上下游耦合性弱。上下游系統之間弱耦合,結構更靈活,由中間代理負責緩衝和非同步恢復。 上下游系統間可以獨立升級和變更,不會互相影響。
3、容量削峰填谷。基於消息的中間代理往往具備很強的流量緩衝和整形能力,業務流量高峰到來時不會擊垮下游。

2.2.3、消息傳輸模型介紹

主流的消息中間件的傳輸模型主要為點對點模型和發佈訂閱模型。

A、點對點模型

點對點模型也叫隊列模型,具有如下特點:
1、消費匿名:消息上下游溝通的唯一的身份就是隊列,下游消費者從隊列獲取消息無法申明獨立身份。
2、一對一通信:基於消費匿名特點,下游消費者即使有多個,但都沒有自己獨立的身份,因此共用隊列中的消息,每一條消息都只會被唯一一個消費者處理。因此點對點模型只能實現一對一通信。

B、點對點模型

發佈訂閱模型具有如下特點:
1、消費獨立:相比隊列模型的匿名消費方式,發佈訂閱模型中消費方都會具備的身份,一般叫做訂閱組(訂閱關係),不同訂閱組之間相互獨立不會相互影響。
2、一對多通信:基於獨立身份的設計,同一個主題內的消息可以被多個訂閱組處理,每個訂閱組都可以拿到全量消息。因此發佈訂閱模型可以實現一對多通信。

C、傳輸模型對比
點對點模型和發佈訂閱模型各有優勢,點對點模型更為簡單,而發佈訂閱模型的擴展性更高。 Apache RocketMQ 使用的傳輸模型為發佈訂閱模型,因此也具有發佈訂閱模型的特點。

 

 

參考:https://rocketmq.apache.org/zh/docs/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 1 拉取鏡像 指定版本,在git查看相應版本,參考: https://github.com/openzipkin/zipkin 如2.21.7 ```bash docker pull openzipkin/zipkin:2.21.7 ``` ## 2 啟動 Zipkin預設埠為9411。啟動 ...
  • # Nacos集群搭建 # 1.集群結構圖 官方給出的Nacos集群圖: ![image-20210409210621117](https://img2023.cnblogs.com/blog/3014273/202308/3014273-20230827184442168-301140741.pn ...
  • 最近github上發現了一個庫(`plottable`),可以用簡單的方式就設置出花哨的 `DataFrame` 樣式。 github上的地址:[https://github.com/znstrider/plottable](https://github.com/znstrider/plottabl ...
  • Kafka 是一個基於發佈-訂閱模式的消息系統,它可以在多個生產者和消費者之間傳遞大量的數據。Kafka 的一個顯著特點是它的高吞吐率,即每秒可以處理百萬級別的消息。那麼 Kafka 是如何實現這樣高得性能呢?本文將從七個方面來分析 Kafka 的速度優勢。 - 零拷貝技術 - 僅可追加日誌結構 - ...
  • 在 gRPC 中使用 JWT(JSON Web Tokens)進行身份驗證是一種常見的做法,它可以幫助你確保請求方的身份和許可權。下麵是一種使用 gRPC 和 JWT 進行身份驗證的步驟: 1. **生成和簽發 JWT:** 在用戶登錄成功後,你需要生成一個 JWT 並將其簽發給用戶。JWT 中可以包 ...
  • 最近接觸到了 [github.com/json-iterator/go](https://github.com/json-iterator/go) , 是由滴滴開源的第三方json編碼庫,它同時提供Go和Java兩個版本。 > 文中大量內容來自 github 上的 wiki 文檔,有興趣的朋友可以直 ...
  • [原題](https://www.luogu.com.cn/problem/UVA908) ## 1.題意分析 題意就是給你很多組數,對於每組數,有三組小數據。第一組小數據先輸入一個n表示頂點數,然後再輸入n-1條邊表示初始邊數。其它組小數據先輸入一個數k,表示增加的邊的數量,然後再輸入k條邊,表示 ...
  • ## 概述 Spring Cloud Zuul 是 Spring Cloud Netflix 子項目的核心組件之一,可以作為微服務架構中的 API 網關使用,有以下用途: - 鑒權:對於訪問每個服務的請求進行鑒權,拒絕鑒權失敗的請求 - 監控:對系統的請求進行監控,記錄請求響應日誌,實時統計當前系統 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...