1. 程式人生 > >rocketmq之原始碼分析broker入口BrokerController解析(十五)

rocketmq之原始碼分析broker入口BrokerController解析(十五)

broker的入口管理服務類BrokerController,在該類中定義並初始化了整個broker需要的核心操作。broker在介面請求處理的過程中,涉及到四方服務的資料互動:namesrv服務,進行釋出當前broker的資訊,訂閱並更新對應的配置資訊;producer服務,接受producer的訊息傳送,同時維持著對客戶端的監聽,如果客戶端發生異常,需要有自動任務處理並通知內部的其他功能業務模組;consumer服務,需要接受consumer的拉取請求,同時維持著相應的心跳機制,如果異常則通知對應的業務功能;還有就是高可用HA服務,該服務支撐master-slave模式,支撐內部資料同步及心跳。

根據上面的說明BrokerController的內部功能維護的模組屬性有:

一,配置分類:

    1,BrokerConfig:整個broker的配置,根據配置資訊設定必要的屬性,核心的有當前broker的名稱,分組,是否master,歷史內容的儲存位置等

    2,NettyServerConfig:broker作為服務端啟動nettyServer的配置

    3,NettyClientConfig:broker作為客戶端的NettyClient的配置

    4,MessageStoreConfig:訊息儲存的核心配置,主要體現訊息的儲存位置,單個檔案大小,記憶體刷盤頻率等事關效能的配置

二,管理分類:

    1,ConsumerOffsetManager:consumer端的消費offset的集中管理,主要的關係就是topic,group,queueid,offset

    2,ConsumerManager:consumer的管理和維護,提供consumer的註冊,取消,關閉等,主要的關係是group,consumerBroupInfo

    3,ConsumerFilterManager:consumer的過濾管理,針對consumer端的訊息過濾,主要關係是topic,consumer,expression

    4,ProducerManager:producer的管理和維護,提供producer的註冊,取消,關閉等,主要關係是group,channel,ClientChannelInfo

    5,FilterServerManager:基於shell的服務端過濾管理

    6,BrokerStatsManager:broker的服務狀態管理,實時記錄broker的操作效能

    7,TopicConfigManager:topic的配置管理,主要提供根據topic獲得對應的topic的配置資訊,涉及讀寫佇列數量、操作許可權等

三,服務處理分類:

    1,ClientHouseKeepingService:基於netty的框架實現,主要監聽客戶端的網路操作,網路的連結、關閉、異常、空閒等事件操作

    2,PullMessageProcessor:針對consumer的請求拉取訊息的事件處理,基於netty框架,解析並執行內部業務功能,最後將資料返回

    3,PullRequestHostService:針對客戶端請求的服務保持,是java的Thread模式,主要是監聽訊息有新的時候通知客戶端執行拉取操作

    4,MessageArrivingListener:新訊息到達的監聽服務,聯合PullRequestHostService進行訊息到達的通知功能

    5,Broker2Client:broker對請求處理的封裝類,處理對應的操作,主要有通知,重置,轉換,狀態等

    6,BrokerOuterAPI:broker請求外部的封裝,主要是通過netty的底層通訊完成和namesrv的互動

四,任務佇列分類:

    1,SlaveSynchronize:salve的同步操作,如果broker是slave角色,執行同步操作,主要同步元資料資訊

    2,BlockingQueue:各種佇列,主要是處理髮送,拉取,查詢等操作,內部是多執行緒佇列機制提高併發處理

    3,ExecutorService:各種執行緒池服務,和佇列一一對應關係,執行多執行緒操作的配置

五,核心功能分類:

    1,MessageStore:訊息的儲存功能,核心及高效能的訊息儲存

    2,RemoteServer:broker作為服務的nettyServer的啟動

    3,RemoteServer:broker的兩級服務,一個是快速提供服務操作,只是沒有pull的事件處理

六,策略分類:

    1,BrokerStats:broker的各種操作預警機制,主要有記錄運算元量

    2,BrokerFastFailure:broker的快速失敗策略,主要針對系統的請求,開啟開功能及時清理過期的請求,避免請求堆積

    3,FileWatchService:檔案監聽服務,如果netty提供ssl安全機制,則載入對應的安全key並執行安全機制

    4,TransactionMessageCheckService:針對事物訊息的驗證服務,後面講事物處理的時候再一塊講解

    5,TransactionMessageService:事物訊息服務,處理接受的內容是事物訊息

說明:RocketMQ的內部物件,為了達到效能及最優記憶體使用,所有的物件在初始化時都明確指定物件的大小,在進行部分物件的序列化時明確指定一些不需要儲存的內容是關鍵字標示不序列化操作。對於併發請求的處理內部採用執行緒池加請求佇列的組合,對於後臺持續掃描的處理採用Thread的單獨後臺執行機制,針對任務排程的有兩種實現,一種是基於任務排程執行緒池的形式執行任務,一種是基於jdk原生的timer的任務執行。在設計層面,做足夠的隔離和封裝,相關之間關係透