RocketMQ学习笔记(7)----RocketMQ的整体架构
1. RocketMQ主要的9個模塊,如圖:
2. 模塊介紹
1. rocketmq-common:通用的常量枚舉,基類方法或者數據結構,按描述的目標來分包,通俗易懂。報名有admin,consumer,filter,hook,message等。
2. rocketmq-remoting:用Netty寫的客戶端和服務端,fastjson做的序列化,自定義二進制協議
3. rocketmq-sevutil: 只用一個ServerUtil類,類注解是,只提供Server程序依賴,目的是為了拆解客戶端依賴,盡可能減少客戶端的依賴
4. rocketmq-store: 存儲服務,消息存儲,索引存儲,commitLog存儲
5. rocketmq-client: 客戶端,包含producer端和consumer端,消息的生產發送和接收消費的過程。
6.?rocketmq-filtersrv:?消息過濾器server
7.?rocketmq-broker: 對consumer和producer來說是服務端,接收producer發來的消息并存儲,同時consumer來這里拉取消息。
8. rocketmq-tools:命令行工具。
9.?rocketmq-namesrv:NameServer,類似zookeeper注冊中心,這里保存著消息的TopicName,隊列等運行時的meta信息。一般系統分dataNode和nameNode,這里是nameNode。
3. 結構層次說明
模塊依賴:最底層為基礎實現,最上層為對外提供的服務模塊
4. NameServer與Zookeeper
在rocketmq的早版本(2.x)的時候,是沒有namesrv組件的,用的是zookeeper做分布式協調和服務發現,但是后期阿里數據根據實際業務需求進行改進和優化,自組研發了輕量級的namesrv,用于注冊Client服務與Broker的請求路由工作,namesrv上不做任何消息的位置存儲(頻繁操作zookeeper的位置存儲數據會影響整體集群性能)
rocketmq-namesrv模塊介紹:
rocketmq-namesrv扮演著nameNode角色,記錄運行時消息相關的meta信息以及broker的filtersrv運行時信息,可以部署集群。
我們可以吧rocketmq-namesrv理解成一個輕量級的zookeeper,他比zookeeper性能更好,并且比zookeeper的可靠性更強。
rocketmq-namesrv主要是節點之間相互進行心跳檢測,數據通信,集群高可靠性,一致性,容錯性等方面的核心模塊。
rocketmq-namesrv的底層通信機制與neetty進行聯系,上層通信與各個模塊產生強一致性的對應關系,當broker,producer,consumer都運行后,namesrv一共有八類線程,如:守護線程,定時任務線程,netty的boss線程,NettyEventExecuter線程,DestroyJavaJVM線程,Work線程,Handler線程,RemotingExecutorThread線程。
5. 底層通信
1. ServerHouseKeepingService:守護線程,本質是ChannelEventListener,監聽broker的channel變化來更新本地的RouteInfo。
2. NSScheduledThread1: 定時任務線程,定時跑2個任務,第一個是,每隔十分鐘掃描出不活動的broker,然后沖routeInfo中刪除,第二個是,每隔十分鐘打印configTable的消息。
3. NettyBossSelector: Netty的boss線程(Accept線程),這里只有一個線程
4.NettyEventExecuter:一個單獨的線程,監聽NettyChannel狀態變化和通知ChannelEventListener要響應的動作。
5. DestroyJavaVM:Java虛擬機析構鉤子,一般是當虛擬機關閉時用來清理或者釋放資源的。
6. NettyServerSelector_x_x: Netty的Work線程(io)線程,這里可能有多個線程
7. NettyServerWorkerThread_x:執行ChannelHandler方法的線程,ChannelHandler運行在線程上,這里可能有多個線程。
8. RemotingExecutorThread_x: 服務端邏輯線程,這里可能有多個線程。rocketmq-namesrv扮演者nameNode角色,記錄運行時meta信息已經broker和filtersrv運行時信息,可以部署集群。
6. 數據存儲
rocketmq-broker模塊介紹:
這個是數據存儲的核心,也就是真正的MQ服務器,我們所謂的消息存儲,接收,拉去,推送這些操作都是在broker上進行的。
rocketmq-filtersrv:
在rocketmq中,使用獨立的一個模塊去對數據進行過濾,實現了真正意義上的高內聚,低耦合的設計思想。
我們在使用rocketmq-filtersrv模塊的時候,也需要啟動filter服務。
原文 RocketMQ學習筆記(7)----RocketMQ的整體架構
轉載于:https://www.cnblogs.com/xiaoshen666/p/10867599.html
總結
以上是生活随笔為你收集整理的RocketMQ学习笔记(7)----RocketMQ的整体架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter Web 性能测试入门 (六
- 下一篇: 第六次实训作业