根據上面的模型,我們可以深入研究一些關于消息系統設計的主題:
- 消費者并發性
- 消費者熱點問題
- 消費者負載均衡
- 消息路由
- 連接多路復用
- 金絲雀部署(Canary Deployments)
生產者(Producer)
生產者向brokers發送由業務應用程序系統生成的消息。RocketMQ提供了發送:同步、異步和單向(one-way)的多種范例。
生產者組(Producer Group)
相同角色的生產者被分組在一起。同一生產者組的另一個生產者實例可能被broker聯系,以提交或回滾事務,以防原始生產者在交易后崩潰。
警告:考慮提供的生產者在發送消息時足夠強大,每個生產者組只允許一個實例,以避免對生產者實例進行不必要的初始化。
消費者(Consumer)
消費者從brokers那里拉取信息并將其輸入應用程序。在用戶應用的角度,提供了兩種類型的消費者:
-
Pull型消費者(PullConsumer)
Pull型消費者主動地從brokers那里拉取信息。只要批量拉取到消息,用戶應用程序就會啟動消費過程
-
Push型消費者(PushConsumer)
另一方面,Push型消費者封裝消息的拉取、消費進度和維護內部的其他工作,將一個在消息到達時執行的回調接口留給終端用戶來實現。
消費者組(Consumer Group)
與前面提到的生產者組相似,相同角色的消費者被分組在一起并命名為消費者組。
消費者群體是一個偉大的概念,它實現了負載平衡和容錯的目標,在信息消費方面,是非常容易的。
警告:消費者群體的消費者實例必須訂閱完全相同的主題。
主題(Topic)
主題是生產者傳遞消息和消費者拉取消息的一個類別。主題與生產者和消費者之間的關系非常松散。具體來說,一個主題可能有零個,一個或多個向它發送消息的生產者;相反,生產者可以發送不同主題的消息。從消費者的角度看,一個主題可能會被零個、一個或多個消費群體訂閱。類似地,消費者組可以訂閱一個或多個主題,只要這個組的實例保持他們的訂閱一致。
消息(Message)
消息是要被投遞的信息。消息必須有一個主題,可以將其解釋為您的信件地址。消息還可能有一個可選的標記(tag)和額外的鍵值對。例如,您可以為消息設置業務密鑰,并在broker 服務器上查找消息,以便在開發期間診斷問題。
消息隊列(Message Queue)
主題被劃分為一個或多個子主題,稱為“message queues”。
標簽(Tag)
標簽,換句話說,為用戶提供了額外的靈活性。有了標簽,來自同一個業務模塊的不同目的的消息可能具有相同的主題和不同的標簽。標簽將有助于保持您的代碼干凈和連貫,并且標簽還可以為RocketMQ提供的查詢系統提供幫助。
代理(Broker)
代理是RocketMQ系統的主要組件。它接收來自生產者的消息,存儲它們并準備處理來自消費者的拉取請求。它還存儲與消息相關的元數據,包括用戶組、消費進度偏移量和主題/隊列信息。
名稱服務(Name Server)
名稱服務器作為路由信息提供者。生產者/消費者客戶端查找主題以找到相應的broker 列表。
消息模型(Message Model)
- Clustering
- Broadcasting
消息順序(Message Order)
在使用DefaultMQPushConsumer
時,您需要決定使用排序的還是并行的消息。
- 排序的(Orderly)
消費消息的有序意味著,消息的使用順序與生產者為每個消息隊列發送的順序相同。如果您正在處理全局順序是強制性的場景,請確保您使用的主題只有一個消息隊列。
警告:如果指定消費有序,則消息消耗的最大并發性是消費者組訂閱的消息隊列的數量。 - 并行的(Concurrently)
并行地使用消息時,消費消息的最大并行度只受每個客戶端指定的線程池大小限制。
警告:此模式不再保證消息順序。