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,根據不同的狀態做不同的處理
消息的存儲結構