核心概念
根據(jù)上述模型朱盐,我們可以深入探討有關消息傳遞系統(tǒng)設計的一些主題:
- 消費者并發(fā)
- 消費者熱點問題
- 消費者負載平衡
- 消息路由器
- 連接多路復用
Producer
生產(chǎn)者將業(yè)務應用程序系統(tǒng)生成的消息發(fā)送給代理氢架。RocketMQ提供多種發(fā)送范例:同步诺核,異步和單向披粟。
Producer Group
具有相同角色的生產(chǎn)者組合在一起碧绞。如果原始生產(chǎn)者在事務之后崩潰,則代理可以聯(lián)系同一生產(chǎn)者組的不同生產(chǎn)者實例以提交或回滾事務比规。
注意:考慮到提供的生產(chǎn)者在發(fā)送消息方面足夠強大若厚,每個生產(chǎn)者組只允許一個實例,以避免不必要的生成器實例初始化蜒什。
Consumer
Consumer從brokers處獲取消息并將其提供給應用程序测秸。從用戶應用的角度來看,提供了兩種類型的Consumer:
PullConsumer
PullConsumer主動從brokers那里獲取消息灾常。一旦提取了批量消息霎冯,用戶應用程序就會啟動消費過程。
PushConsumer
另一方面钞瀑,PushConsumer封裝消息提取沈撞,消耗進度并維護其他內(nèi)部工作,留下最終用戶的回調(diào)接口以實現(xiàn)將在消息到達時執(zhí)行雕什。
Consumer Group
與之前提到的生產(chǎn)者組類似缠俺,完全相同角色的Consumer被組合在一起并命名為Consumer Group。
Consumer Group是一個很好的概念贷岸,在消息消費方面實現(xiàn)負載平衡和容錯目標非常容易壹士。
注意:使用者組的使用者實例必須具有完全相同的主題訂閱。
Topic
Topic是生產(chǎn)者傳遞消息和消費者提取消息的類別偿警。Topic與生產(chǎn)者和消費者的關系非常松散躏救。具體而言,Topic可能有零個螟蒸,一個或多個生成器向其發(fā)送消息; 相反盒使,生產(chǎn)者可以發(fā)送不同Topic的消息。從消費者的角度來看七嫌,Topic可以由零個忠怖,一個或多個消費者群體訂閱。類似地抄瑟,消費者組可以訂閱一個或多個主題凡泣,只要該組的實例保持其訂閱一致即可。
Message
Message是要傳遞的信息皮假。Message必須有一個主題鞋拟,可以將其解釋為您要發(fā)送給的郵件地址。Message還可以具有可選標記和額外的鍵 - 值對惹资。例如贺纲,您可以為消息設置業(yè)務密鑰,并在代理服務器上查找Message以診斷開發(fā)期間的問題褪测。
Message Queue
主題被劃分為一個或多個子主題“Message Queue”猴誊。
Tag
Tag潦刃,換句話說,子主題懈叹,為用戶提供了額外的靈活性乖杠。對于標記,來自同一業(yè)務模塊的具有不同目的的消息可以具有相同的主題和不同的標記澄成。Tag有助于保持代碼的清晰和連貫胧洒,而Tag也可以方便RocketMQ提供的查詢系統(tǒng)。
Broker
Broker是RocketMQ系統(tǒng)的主要組成部分墨状。它接收從生產(chǎn)者發(fā)送的消息卫漫,存儲它們并準備處理來自消費者的拉取請求。它還存儲與消息相關的元數(shù)據(jù)肾砂,包括消費者組列赎,消耗進度偏移和主題/隊列信息。
Name Server
Name Server充當路由信息提供者镐确。生產(chǎn)者/消費者客戶查找主題以查找相應的代理列表包吝。
Message Model 消息模型
Clustering聚類
Broadcasting廣播
Message Order 消息順序
使用DefaultMQPushConsumer時,您可能決定按順序或同時使用消息辫塌。
- 有順序地
按順序使用消息意味著消息的消費順序與生產(chǎn)者為每個消息隊列發(fā)送的順序相同漏策。如果您正在處理全局順序是必需的方案派哲,請確保您使用的主題只有一個消息隊列臼氨。
注意:如果指定了有序消費,則消息消耗的最大并發(fā)數(shù)是消費者組訂閱的消息隊列數(shù)芭届。
- 同時
在并發(fā)使用消息時储矩,消息消耗的最大并發(fā)性僅受為每個使用者客戶端指定的線程池的限制。
注意:此模式下不再保證消息順序褂乍。