消息中間件之RocketMQ(一)

RocketMQ是一款分佈式隊列模型模型的中間件。4.3.x版本支持分佈式事務。支持集羣模型,負載均衡,水平拓展。億級別的消息堆積能力。採用零拷貝的原理,順序寫盤,隨機讀。

概念模型

  • producer:消息生產者,負責產生消息,一般由業務系統負責產生消息
  • consumer:消息消費者,負責消費消息,一般是後臺系統負責異步消費,並將其提供給應用程序。從用戶應用的角度而言提供了兩種消費形式:拉取式消費、推動式消費。
  • push consumer:consumer的一種,需要向consumer對象註冊監聽器
  • pull consumer:consumer的一種,需要主動從brocker拉取消息
  • producer grop:生產者集合,一般用於發送一類消息
  • consumer grop 消費者集合:一般用於接受一類消息
  • Broker:MQ消息服務(中轉角色,用於消息存儲與生產消費轉發)

RocketMQ主從模式

  • 主從模式環境構建可以保證消息的及時性和可靠性
  • 投遞一條消息後,關閉主節點
  • 從節點繼續可以提供消費者數據進行消費,但是不能接受消息
  • 主節點上線後進行消費進度offset同步
  • 同步信息:數據內容+元數據信息

RocketMQ生產者-核心參數

producerGroup:組名

createTopicKey

defaultTopicQueueNums:4

sendMsgTimeout:單位ms

compressMsgBodyOverHowMuch:默認壓縮字節4096

retryTimesWhenSendFailed(可配置)

retryAnotherBrokerWhenNotStoreOk:默認false

生產者發送消息的返回狀態

  • SEND_OK
  • FLUSH_DISK_TIMEOUT
  • FLUSH_SLAVE_TIMEOUT
  • SLAVE_NOT_AVAILABLE

生產者-延遲消息

  • 消息發到broker後,要特定的時間纔會被Consumer消費
  • 目前只支持固定精度的定時消息
  • MessageStoreConfig配置類和ScheduleMessageService任務類

生產者-自定義消息發送規則

RocketMQ消費者-核心參數

pushConsumer參數詳解

  • consumerFromWhere
  • allocateMessageQueueStrategy
  • subscription
  • offstrore
  • consumerThreadMin/consumerThreadMax
  • consumerConcurrentlyMaxSpan/pullThresholdForQueue
  • consumerMessageBatchMaxSize

pushConsumer消費模式---集羣模式

clustering模式(默認)

GroupName用於把多個consumer組織到一起,相同的GroupName的consumero只消費所訂閱消息的一部分,從而達到負載均衡

pushConsumer消費模式---廣播模式

broadCasting模式(默認)

同一個consumerGroup裏的Consumer都消費訂閱Topic全部信息,也就是一條消息會被每一個consumer消費

消息存儲核心----offset

offset指某個topic下的一條消息在某個MessageQueue裏的位置。offset存儲分爲遠程和本地文件存儲。

默認clustering集羣模式,採用遠程文件存儲offset,本質上因爲多消費模式,每個consumer消費topic的一部分,這種情況broker控制offset的值,使用remoteBrokerOffsetStore

廣播模式採用localFileOffsetStore

DefaultpushConsumer----長輪詢機制

pullConsumer使用方式

消息拉取方式:DefaultMQPullConsumer

獲取MessageQueue並遍歷,維護offstore,根據不同的狀態做不同的處理

消息的存儲結構

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