欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java開發(fā)RocketMQ消息中間件原理基礎(chǔ)詳解

 更新時間:2021年11月15日 11:27:42   作者:秋天的春  
最近 RocketMQ 剛剛上生產(chǎn)環(huán)境,閑暇之時在這里做一些分享,主要目的是讓初學者能快速上手RocketMQ,有需要的朋友可以借鑒參考下,希望能夠有所幫助

RocketMQ 是什么

Github 上關(guān)于 RocketMQ 的介紹:
RcoketMQ 是一款低延遲、高可靠、可伸縮、易于使用的消息中間件。具有以下特性:

  • 支持發(fā)布/訂閱(Pub/Sub)和點對點(P2P)消息模型
  • 在一個隊列中可靠的先進先出(FIFO)和嚴格的順序傳遞
  • 支持拉(pull)和推(push)兩種消息模式
  • 單一隊列百萬消息的堆積能力
  • 支持多種消息協(xié)議,如 JMS、MQTT 等
  • 分布式高可用的部署架構(gòu),滿足至少一次消息傳遞語義
  • 提供 docker 鏡像用于隔離測試和云集群部署
  • 提供配置、指標和監(jiān)控等功能豐富的 Dashboard

對于這些特性描述,大家簡單過一眼就即可,深入學習之后自然就明白了。

專業(yè)術(shù)語

 Producer

消息生產(chǎn)者,生產(chǎn)者的作用就是將消息發(fā)送到 MQ,生產(chǎn)者本身既可以產(chǎn)生消息,如讀取文本信息等。也可以對外提供接口,由外部應用來調(diào)用接口,再由生產(chǎn)者將收到的消息發(fā)送到 MQ。

Producer Group

生產(chǎn)者組,簡單來說就是多個發(fā)送同一類消息的生產(chǎn)者稱之為一個生產(chǎn)者組。在這里可以不用關(guān)心,只要知道有這么一個概念即可。

Consumer

消息消費者,簡單來說,消費 MQ 上的消息的應用程序就是消費者,至于消息是否進行邏輯處理,還是直接存儲到數(shù)據(jù)庫等取決于業(yè)務需要。

Consumer Group

消費者組,和生產(chǎn)者類似,消費同一類消息的多個 consumer 實例組成一個消費者組。

Topic

Topic 是一種消息的邏輯分類,比如說你有訂單類的消息,也有庫存類的消息,那么就需要進行分類,一個是訂單 Topic 存放訂單相關(guān)的消息,一個是庫存 Topic 存儲庫存相關(guān)的消息。

Message

Message 是消息的載體。一個 Message 必須指定 topic,相當于寄信的地址。Message 還有一個可選的 tag 設(shè)置,以便消費端可以基于 tag 進行過濾消息。也可以添加額外的鍵值對,例如你需要一個業(yè)務 key 來查找 broker 上的消息,方便在開發(fā)過程中診斷問題。

Tag

標簽可以被認為是對 Topic 進一步細化。一般在相同業(yè)務模塊中通過引入標簽來標記不同用途的消息。

Broker

Broker 是 RocketMQ 系統(tǒng)的主要角色,其實就是前面一直說的 MQ。Broker 接收來自生產(chǎn)者的消息,儲存以及為消費者拉取消息的請求做好準備。

Name Server

Name Server 為 producer 和 consumer 提供路由信息。

RocketMQ 架構(gòu)

有四個集群,分別是 NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群:

NameServer: 提供輕量級的服務發(fā)現(xiàn)和路由。 每個 NameServer 記錄完整的路由信息,提供等效的讀寫服務,并支持快速存儲擴展。

Broker: 通過提供輕量級的 Topic 和 Queue 機制來處理消息存儲,同時支持推(push)和拉(pull)模式以及主從結(jié)構(gòu)的容錯機制。

Producer:生產(chǎn)者,產(chǎn)生消息的實例,擁有相同 Producer Group 的 Producer 組成一個集群。

Consumer:消費者,接收消息進行消費的實例,擁有相同 Consumer Group 的

Consumer 組成一個集群。

簡單說明一下圖中箭頭含義,從 Broker 開始,Broker Master1 和 Broker Slave1 是主從結(jié)構(gòu),它們之間會進行數(shù)據(jù)同步,即 Date Sync。同時每個 Broker 與
NameServer 集群中的所有節(jié)
點建立長連接,定時注冊 Topic 信息到所有 NameServer 中。

Producer 與 NameServer 集群中的其中一個節(jié)點(隨機選擇)建立長連接,定期從 NameServer 獲取 Topic 路由信息,并向提供 Topic 服務的 Broker Master 建立長連接,且定時向 Broker 發(fā)送心跳。Producer 只能將消息發(fā)送到 Broker master,但是 Consumer 則不一樣,它同時和提供 Topic 服務的 Master 和 Slave
建立長連接,既可以從 Broker Master 訂閱消息,也可以從 Broker Slave 訂閱消息。

RocketMQ 集群部署模式

單 master 模式

也就是只有一個 master 節(jié)點,稱不上是集群,一旦這個 master 節(jié)點宕機,那么整個服務就不可用,適合個人學習使用。

多master 模式

多個 master 節(jié)點組成集群,單個 master 節(jié)點宕機或者重啟對應用沒有影響。

優(yōu)點:所有模式中性能最高
缺點:單個 master 節(jié)點宕機期間,未被消費的消息在節(jié)點恢復之前不可用,消息的實時性就受到影響。

注意:使用同步刷盤可以保證消息不丟失,同時 Topic 相對應的 queue 應該分布在集群中各個節(jié)點,而不是只在某各節(jié)點上,否則,該節(jié)點宕機會對訂閱該 topic 的應用造成影響。

多 master 多 slave 異步復制模式

在多 master 模式的基礎(chǔ)上,每個 master 節(jié)點都有至少一個對應的 slave。master
節(jié)點可讀可寫,但是 slave 只能讀不能寫,類似于 mysql 的主備模式。

優(yōu)點: 在 master 宕機時,消費者可以從 slave 讀取消息,消息的實時性不會受影響,性能幾乎和多 master 一樣。
缺點:使用異步復制的同步方式有可能會有消息丟失的問題。

多 master 多 slave 同步雙寫模式

同多 master 多 slave 異步復制模式類似,區(qū)別在于 master 和 slave 之間的數(shù)據(jù)同步方式。

優(yōu)點:同步雙寫的同步模式能保證數(shù)據(jù)不丟失。
缺點:發(fā)送單個消息 RT 會略長,性能相比異步復制低10%左右。

刷盤策略:同步刷盤和異步刷盤(指的是節(jié)點自身數(shù)據(jù)是同步還是異步存儲)

同步方式:同步雙寫和異步復制(指的一組 master 和 slave 之間數(shù)據(jù)的同步)

注意:要保證數(shù)據(jù)可靠,需采用同步刷盤和同步雙寫的方式,但性能會較其他方式低。

以上就是java開發(fā)RocketMQ消息中間件基礎(chǔ)詳解的詳細內(nèi)容,更多關(guān)于RocketMQ消息中間件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java 接口回調(diào)實例詳解

    java 接口回調(diào)實例詳解

    這篇文章主要介紹了java 接口回調(diào)實例詳解的相關(guān)資料,所謂回調(diào)就是使用java中的多態(tài),需要的朋友可以參考下
    2017-07-07
  • Java基礎(chǔ)-Java變量的聲明和作用域

    Java基礎(chǔ)-Java變量的聲明和作用域

    這篇文章主要介紹了Java變量的聲明和作用域,變量其實就是內(nèi)存中的一個存儲空間,用來存儲數(shù)據(jù),具體的相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01
  • 詳解Spring加載Properties配置文件的四種方式

    詳解Spring加載Properties配置文件的四種方式

    這篇文章主要介紹了詳解Spring加載Properties配置文件的四種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • JAVA與SQL 中的null與NULL解析

    JAVA與SQL 中的null與NULL解析

    這篇文章主要介紹了JAVA與SQL 中的null與NULL解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實現(xiàn)定時任務的方法詳解

    Java實現(xiàn)定時任務的方法詳解

    大家都用過鬧鐘,鬧鐘可以說是一種定時任務。那么,在?Java?中,如何實現(xiàn)這樣的功能呢?即如何實現(xiàn)定時任務呢?本文就來詳細和大家聊聊
    2022-10-10
  • java算法題解LeetCode35復雜鏈表的復制實例

    java算法題解LeetCode35復雜鏈表的復制實例

    這篇文章主要為大家介紹了java算法題解LeetCode35復雜鏈表的復制實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Spring @Lookup深入分析實現(xiàn)原理

    Spring @Lookup深入分析實現(xiàn)原理

    這篇文章主要介紹了Spring @Lookup實現(xiàn)原理,我們知道在spring容器中單獨的一個抽象類是不能成為一個bean的,那么有沒有辦法呢?這個時候我們可以使用Lookup注解
    2023-01-01
  • java理論基礎(chǔ)Stream元素的匹配與查找

    java理論基礎(chǔ)Stream元素的匹配與查找

    這篇文章主要為大家介紹了java理論基礎(chǔ)Stream元素的匹配與查找方法的示例說明解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java面向?qū)ο笾畠?nèi)部類詳解

    Java面向?qū)ο笾畠?nèi)部類詳解

    在 Java 中,允許一個類的定義位于另一個類的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。這篇文章將總結(jié)一下內(nèi)部類的使用,感興趣的可以了解一下
    2022-10-10
  • Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解

    Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解

    Java的synchronized關(guān)鍵字用于修飾線程同步,用以線程資源共享的目的等,下面就帶來簡單的Java多線程編程中synchronized關(guān)鍵字的基礎(chǔ)用法講解
    2016-06-06

最新評論