RocketMQ架構原理及名詞概念(三)
這節主要講述RocketMQ的整體架構,和常用術語解釋。當我們接觸一個新東西的時候,一定要知道他的原理,只有知道原理之後,才會產生問題。只有帶著問題去讀原始碼才會事半功倍。
首先盜用官方的一張圖片:(官方地址:http://rocketmq.apache.org/)
NameServer:從上圖可以清楚的看到NameServer主要乾了兩件事情,服務發現和路由。如果你知道zookeeper就可以很好理解NameServer了。NameServer就是一個輕量級的zookeeper。多個NameServer可以橫向擴充套件,且它們之間沒有任何通訊。
Broker:Broker是RocketMQ的核心組成部分,通過輕量級的Topic和佇列機制來維護訊息儲存,Broker支援訊息Push和Pull模式。支援千億級別的訊息堆積能力,總之很強大。
Producer:顧名思義生產者,Producer去NameServer獲取Broker列表,進行輪詢傳送訊息。每個生產者都有一個ID(編號),多個生產者例項可以共用同一個ID。同一個ID下所有例項組成一個生產者叢集。
Consumer:顧名思義消費者,Consumer去NameServer獲取Broker列表,進行訊息消費,支援Push和Pull兩種模式。每個訂閱者也有一個ID(編號),多個消費者例項可以共用同一個ID。同一個ID下所有例項組成一個消費者叢集。
原始碼模組說明(RokcetMQ版本4.3.1):
rocketmq-broker:服務端,接受訊息,儲存訊息,consumer拉取訊息
rocketmq-client:訊息傳送和接收,包含consumer和producer
rocketmq-common:通用的列舉、基類方法、或者資料結構,包名有admin、consumer、filter、hook、message
rocketmq-distribution:指令碼、配置模組,RocketMQ編譯時,bin目錄,benchmark目錄,conf目錄都是從這個模組編譯輸出的
rocketmq-example:示例模組
rocketmq-filter:訊息過濾器
rocketmq-logappender:日誌
rocketmq-logging:日誌
rocketmq-namesrv:NameServer,類似服務註冊中心,broker在這裡註冊,consumer和producer在這裡找到broker地址
rocketmq-openmessaging:RocketMQ支援openmessaging,詳見:http://openmessaging.cloud
rocketmq-remoting:使用netty的客戶端、服務端,使用fastjson序列化,自定義二進位制協議
rocketmq-srvutil:只有一個ServerUtil類,只提供Server程式依賴,儘可能減少客戶端依賴
rocketmq-store:訊息儲存,索引,consumerLog,commitLog等
rocketmq-tools:命令列工具