從一個問題開始
1、一個boker,一個主題,兩個佇列,一個消費者組,一個消費節點,此時兩個佇列是落在一個消費節點上,請問這個消費節點是如何拉取資料的?
需要明確關鍵物件之間的關係。
關鍵物件有:
1、RebalancePushImpl---》佇列經過相關負載均衡演算法,最終哪些佇列落在當前節點上
2、DefaultMQPushConsumerImpl ----》當前節點向佇列拉取資料
3、PullAPIWrapper ---》底層透過netty,向rocketmq伺服器拉取資料,最終將資料存放在快取佇列中
4、PullMessageService ---》 迴圈從快取佇列中獲取資料,並將資料分發給後面的處理執行緒池或單執行緒
org.apache.rocketmq.client.impl.consumer.RebalancePushImpl#dispatchPullRequest --->佇列經過相關負載均衡演算法,最終哪些佇列落在當前節點上,儲存在快取佇列中(此時一個節點有兩個mq佇列)
org.apache.rocketmq.client.impl.consumer.PullMessageService#run (關鍵)
--->定時從快取佇列中彈出 PullRequest(mq佇列),
--->org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl#pullMessage (關鍵)向rocketmq伺服器拉取某個mq佇列的資料,
20240801
從執行緒維度進行觀察:單執行緒拉取資料,再將資料分發給消費執行緒池去處理(併發模式)