1. 程式人生 > >RocketMQ探祕——客戶端消費

RocketMQ探祕——客戶端消費

一、客戶端元件總覽

            每個客戶端有一個管理者(MQClientManager),是單例,負責生產MQInstance物件,MQClientManager通過id將多個MQInstance物件放在一個列表中。MQClientManager的id命名規範是[email protected]@unitName。一般情況下是一個客戶端只有一個MQInstance物件。MQInstance通過組名來管理多個生產者與消費者,即一個分組只能又一個生產者與消費者。MQInstance通過pullmessage服務完成訊息的拉取,通過rebalanceservice實現訊息負載均衡,由此也可以看出RocketMQ是做服務端做了負載均衡策略。MQClientAPIImpl是與遠端互動的rpc介面。關係圖如下所示。

元件關係

二、訊息拉取

拉取訊息就要知道到哪裡拉取,什麼時候拉取。這兩個功能分別由rebalanceService和pullMessageService完成。rebalanceService會20秒執行一次負載均衡。負載均衡主要的幹了以下幾個事:

1、獲取topic在broker中得分佇列地址messageQueue,一個topic可以對多個broker,所以messagequeue也有多個

2、從nameserver上獲取所有的客戶端資訊

3、根據負載均衡策略找出某個客戶端可消費的messagequeue

4、根據messagequeue生成pullRequest物件,放到pullMessageService的佇列中

到此rebalance已經完成拉取請求的生產,pullMessageService通過消費pullrequest來拉取訊息