RocketMQ -- 消費者啟動流程

大軍發表於2022-03-31

消費者在傳送訊息的時候,有一個分組的概念。也就是說,有一個或者多個消費者的名稱,是同一個,這些名稱一樣的消費者,組成了一個消費組。

比如下圖中,兩個group_a是一個消費組,兩個group_b是一個消費組。

image.png

當broker有訊息a進來的時候,那這個訊息都會同時被這兩個消費組所消費。

image.png

我們也看到了每個消費組是有多個消費者的,如果訊息被group_a消費的時候,兩個消費者是怎麼消費的呢?

這裡就涉及到了叢集模式與廣播模式兩種消費模式。

在叢集模式下,這個訊息只能被消費組內一個消費者進行消費。比如group_a是叢集模式,那此時只能一個消費者進行消費。

image.png

在廣播模式下,這個訊息會被消費組下的每一個消費者進行消費比如group_b是廣播模式,那此時兩個消費者都進行消費。

image.png

消費組和消費模式這麼重要,所以消費者啟動的時候,就需要去校驗消費組和消費模式。

image.png

構建Topic訂閱資訊,比如這個消費者需要訂閱TopicTest的訊息,就是在這裡構建的。這個步驟中,Topic訂閱資訊是一個map,所以會存在多個的。

image.png

基礎資訊準備好了,就開始初始化MQClientInstance、RebalanceImple(訊息重新負載實現類)。

image.png

初始化訊息進度,這裡根據消費模式會有兩種情況:

一個是叢集模式,由於消費組的幾個消費者只能一個進行消費,如果這個消費者掛了,那另外一個消費者需要從之前的位置開始消費,所以這個進度不能儲存在本地,需要儲存在broker中,最終從broker拉取消費進度。

另外一個是叢集模式,消費者的訊息自己維護自己的進度,所以這個進度儲存在自己的本地,最終從本地拉取消費進度。

image.png

如果訊息是順序消費的,那建立一個順序訊息消費服務,如果不是,則建立併發訊息消費服務,這兩個後面來講細節。

建立好後啟動相應的訊息消費服務。

image.png

註冊消費者,再啟動消費者客戶端,這裡的啟動跟生產者是一樣的,包括訊息重新負載的啟動等。

image.png

相關文章