中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

RocketMQ 源碼學(xué)習(xí) 1 : 整體結(jié)構(gòu)

2018-07-02    來源:importnew

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

1.為什么是RocketMQ

為什么是 RocketMQ,而不是 ActiveMQ/RabbitMQ/Kafka 呢?這不是技術(shù)選型,我只是想找一個業(yè)界比較好的、開源的 MQ 系統(tǒng),學(xué)習(xí)一下 MQ 的工作原理。所以首選 Java 的(雖然語言對我來說不是問題,然還是有點學(xué)習(xí)成本的),這就只剩下 RocketMQ 和 ActiveMQ 了,這兩個那就肯定 選RocketMQ 了,畢竟人家是這么吹牛逼的: “萬億級數(shù)據(jù)洪峰下的分布式消息引擎”。

2.項目結(jié)構(gòu)

  • benchmark, 一些 sh 腳本,調(diào)用 example 模塊中的 benchmark Producer/Consumer 來做一些測試
  • broker, 消息代理,起到串聯(lián) Producer/Consumer 和 Store 的作用
  • client,包含 Producer 和 Consumer,負(fù)責(zé)消息的發(fā)和收
  • common,一些公共代碼,供其他模塊依賴
  • distribution, 一些 sh 腳本和 配置,主要是在部署的時候用的
  • example,使用樣例,包括各種使用方法,Pull模式、Push模式、廣播模式、有序消息、事務(wù)消息等等
  • filter,過濾器,用于服務(wù)端 SQL92 的過濾方式
  • filtersrv, 過濾器 server, 用于消費端過濾,主要負(fù)責(zé)動態(tài)的加載和實例化過濾器
  • logappender,日志相關(guān)
  • namesrv,可以理解成注冊中心,每個 broker 都會在這里注冊,client 也會從這里獲取 broker 的相關(guān)信息
  • openmessaging, 講真,還沒去了解,應(yīng)該是類似于 opentracing 這種,按照一套標(biāo)準(zhǔn)(或者叫API),封裝了一下RocketMQ原來的接口,讓其可以通用一點。我猜的!
  • remoting,基于 Netty 實現(xiàn)的網(wǎng)絡(luò)通信模塊,包括 Server 和 Client, client、broker、filtersrv 等模塊對它都有依賴
  • srvutil, 里面只有兩個類,一個是來處理命令行的,一個是來配置 shutdownHook 的
  • store,負(fù)責(zé)消息的存儲和讀取
  • style,代碼模板,為了統(tǒng)一代碼風(fēng)格
  • test, 測試用例
  • tools, 一些工具類,基于它們可以寫一些 sh 工具來管理、查看MQ系統(tǒng)的一些信息

3.我的重點關(guān)注

這么多模塊,我并不是每一個都一行行代碼的去讀,像 distribution、test、tools 這些我就大概掃了一眼。那么哪些是我重點關(guān)注的呢?主要是 broker、client、common、namesrv、store、remoting,這幾個是核心模塊,值得認(rèn)真研讀,其它模塊不要它們也能跑起來。

4.RocketMQ邏輯部署結(jié)構(gòu)


這是 RocketMQ 的邏輯部署結(jié)構(gòu)(參考《RocketMQ原理簡介 v3.1.1》),包括 producer/broker/namesrv/consumer 四大部分。namesrv 起到注冊中心的作用,部署的時候會用到 rocketmq-namesrv/rocketmq-common/rocketmq-remoting 三個模塊的代碼;broker 部署的時候會用到 rocketmq-broker/rocketmq-store/rocketmq-common/rocketmq-remoting 四個模塊的代碼;producer 和 consumer 會用到 rocketmq-client/rocketmq-common/rocketmq-remoting 三個模塊的代碼,這里雖然將它們分開畫了,但實際上一個應(yīng)用往往既是producer又是consumer。

Consumer 和 Broker 之間其實還可以加一個 filtersrv,用來做消費端的消息過濾。

這里面還有幾個概念:

  • Producer Group, 一類 Producer 的集合的名稱
  • Consumer Group, 一類 Consumer 的集合的名稱
  • Topic, 消息的主題,用來標(biāo)識一類消息,還有 Tag 可以用來區(qū)分一個 Topic 下的多種消息。

Producer Group、Consumer Group 和 Topic 之間并沒有強(qiáng)制的某種關(guān)系,一個 Producer Group 可以發(fā)多個 Topic 的消息,一個 Consumer Group 也可以消費多個 Topic 的消息。一個Consumer Group 可以消費來自多個 Producer Group的消息,一個 Producer Group 的消息也可以被多個 Consumer Group 消費。

Reference

  • RocketMQ 原理簡介
  • 分布式開放消息系統(tǒng)(RocketMQ)的原理與實踐

標(biāo)簽: 代碼 腳本 通信 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:ERROR 3009 (HY000) : Column count of mysql.user is wrong

下一篇:ERROR 1044 (42000) : Access denied for user ‘root’@'localhost’