RocketMQ基本概念
一、生產者
生產者發送業務系統產生的消息給broker。RocketMQ提供了多種發送方式:同步的、異步的、單向的。
1.1 生產者組
具有相同角色的生產者被分到一組。假如原始的生產者在事務后崩潰,broker會聯系 同一生產者組中的不同生產者實例,繼續提交或回滾事務。
二、消費者
一個消費者從broker拉取信息,並將信息返還給應用。為了我們應用的正確性,提供了兩種消費者類型:
拉式消費者:拉式消費者從broker拉取消息,一旦一批消息被拉取,用戶應用系統將發起消費過程。
推式消費者:推式消費者,從另一方面講,囊括了消息的拉取、消費過程,並保持了內部的其他工作,留下了一個回調 接口給終端用戶去實現,實現在消息到達時要執行的內容。
2.1 消費者組
具有相同角色的消費者被組在一起,稱為消費者組。它是一個偉大的概念,它完成了負載均衡和容錯的目標。 就消費消息而言,它是非常容易的。
一個消費組中的消費者實例必須有確定的相同的訂閱topic。
三、Topic(主題)
Topic是一個消息的目錄,在這個目錄中,生產者傳送消息,消費者拉取消息。Topic與生產者和消費者之間的關系非常的寬松。 明確的,一個Topic可以有0個,1個或多個生產者向它發送消息。相反的,一個生產者可以發送不同Topic的消息。 在消費者方面,一個Topic可以被0個,1個或多個消費者組訂閱。相似的,一個消費者組可以訂閱1個或多個Topic,只要組內的消費者實例 保持訂閱的一致性。
四、Message(消息)
消息是被傳遞的信息。一個消息必須有一個Topic,它可以理解為信件上的地址。一個消息也可以有一個可選的tag,和額外的key-value對。 例如:你可以設置業務中的鍵到你的消息中,在broker服務中查找消息,以便在開發期間診斷問題。
五、消息隊列
Topic被分割成一個或多個消息隊列。隊列分為3中角色:異步主、同步主、從。如果你不能容忍消息丟失,我們建議你部署同步主,並加一個從隊列。 如果你容忍丟失,但你希望隊列總是可用,你可以部署異步主和從隊列。如果你想最簡單,你只需要一個異步主,不需要從隊列。 消息保存磁盤的方式也有兩種,推薦使用的是異步保存,同步保存是昂貴的並會導致性能損失,如果你想要可靠性,我們推薦你使用同步主+從的方式。
六、Tag(標簽)
標簽,用另外一個詞來說,就是子主題,為用戶提供額外的靈活性。具有相同Topic的消息可以有不同的tag。
七、Broker(隊列)
Broker是RocketMQ的一個主要組件,它接收生產者發送的消息,存儲它們並准備處理消費者的拉取請求。它也存儲消息相關的元數據, 包括消費組,消費成功的偏移量,主題、隊列的信息。
八、名稱服務
名稱服務主要提供路由信息。生產者/消費者客戶端尋找topic,並找到通信的隊列列表。
九、消息的順序
當DefaultMQPushConsumer
被使用,你就要決定消費消息時,是順序消費還是同時消費。
-
順序消費
順序消費消息的意思是 消息將按照生產者發送到隊列時的順序被消費掉。如果你被強制要求使用全局的順序,你要確保你的topic只有一個消息隊列。
如果指定順序消費,消息被同時消費的數量就是訂閱這個topic的消費組的數量。
-
同時消費
當同時消費消息時,消息同時消費的最大數量取決於消費客戶端指定的線程池的大小。