RocketMQ技術內幕:RocketMQ架構設計與實現原理( 簡體 字) | |
作者:丁威 周繼鋒 | 類別:1. -> 程式設計 -> 綜合 |
出版社:機械工業出版社 | 3dWoo書號: 50354 詢問書籍請說出此書號! 有庫存 NT售價: 345 元 |
出版日:12/1/2018 | |
頁數:290 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111614210 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
推薦序
前言 第1章 閱讀源代碼前的準備 1 1.1 獲取和調試RocketMQ的源代碼 1 1.1.1 Eclipse獲取RocketMQ源碼 2 1.1.2 Eclipse調試RocketMQ源碼 9 1.1.3 IntelliJ IDEA獲取RocketMQ源碼 15 1.1.4 IntelliJ IDEA調試RocketMQ源碼 20 1.2 RocketMQ源代碼的目錄結構 27 1.3 RocketMQ的設計理念和目標 28 1.3.1 設計理念 28 1.3.2 設計目標 28 第2章 RocketMQ路由中心NameServer 31 2.1 NameServer架構設計 31 2.2 NameServer啟動流程 32 2.3 NameServer路由注冊、故障剔除 36 2.3.1 路由元信息 36 2.3.2 路由注冊 38 2.3.3 路由刪除 43 2.3.4 路由發現 46 2.4 本章小結 47 第3章 RocketMQ消息發送 49 3.1 漫談RocketMQ消息發送 49 3.2 認識RocketMQ消息 50 3.3 生產者啟動流程 51 3.3.1 初識DefaultMQProducer消息發送者 51 3.3.2 消息生產者啟動流程 54 3.4 消息發送基本流程 56 3.4.1 消息長度驗證 56 3.4.2 查找主題路由信息 56 3.4.3 選擇消息隊列 60 3.4.4 消息發送 65 3.5 批量消息發送 71 3.6 本章小結 74 第4章 RocketMQ消息存儲 75 4.1 存儲概要設計 75 4.2 初識消息存儲 76 4.3 消息發送存儲流程 78 4.4 存儲文件組織與內存映射 83 4.4.1 MappedFileQueue映射文件隊列 84 4.4.2 MappedFile內存映射文件 87 4.4.3 TransientStorePool 93 4.5 RocketMQ存儲文件 94 4.5.1 Commitlog文件 95 4.5.2 ConsumeQueue文件 97 4.5.3 Index索引文件 100 4.5.4 checkpoint文件 104 4.6 實時更新消息消費隊列與索引文件 105 4.6.1 根據消息更新ConumeQueue 107 4.6.2 根據消息更新Index索引文件 108 4.7 消息隊列與索引文件恢復 109 4.7.1 Broker正常停止文件恢復 112 4.7.2 Broker異常停止文件恢復 114 4.8 文件刷盤機制 115 4.8.1 Broker同步刷盤 116 4.8.2 Broker異步刷盤 119 4.9 過期文件刪除機制 122 4.10 本章小結 126 第5章 RocketMQ消息消費 127 5.1 RocketMQ消息消費概述 127 5.2 消息消費者初探 128 5.3 消費者啟動流程 130 5.4 消息拉取 133 5.4.1 PullMessageService實現機制 133 5.4.2 ProcessQueue實現機制 136 5.4.3 消息拉取基本流程 138 5.5 消息隊列負載與重新分布機制 154 5.6 消息消費過程 162 5.6.1 消息消費 163 5.6.2 消息確認(ACK) 167 5.6.3 消費進度管理 171 5.7 定時消息機制 176 5.7.1 load方法 177 5.7.2 start方法 178 5.7.3 定時調度邏輯 179 5.8 消息過濾機制 181 5.9 順序消息 186 5.9.1 消息隊列負載 187 5.9.2 消息拉取 187 5.9.3 消息消費 188 5.9.4 消息隊列鎖實現 195 5.10 本章小結 196 第6章 消息過濾FilterServer 198 6.1 ClassFilter運行機制 198 6.2 FilterServer注冊剖析 199 6.3 類過濾模式訂閱機制 202 6.4 消息拉取 205 6.5 本章小結 206 第7章 RocketMQ主從同步(HA)機制 207 7.1 RocketMQ主從復制原理 207 7.1.1 HAService整體工作機制 208 7.1.2 AcceptSocketService實現原理 208 7.1.3 GroupTransferService實現原理 210 7.1.4 HAClient實現原理 211 7.1.5 HAConnection實現原理 214 7.2 RocketMQ讀寫分離機制 220 7.3 本章小結 223 第8章 RocketMQ事務消息 225 8.1 事務消息實現思想 225 8.2 事務消息發送流程 226 8.3 提交或回滾事務 232 8.4 事務消息回查事務狀態 233 8.5 本章小結 240 第9章 RocketMQ實戰 242 9.1 消息批量發送 242 9.2 消息發送隊列自選擇 243 9.3 消息過濾 243 9.3.1 TAG模式過濾 244 9.3.2 SQL表達模式過濾 244 9.3.3 類過濾模式 245 9.4 事務消息 247 9.5 Spring整合RocketMQ 250 9.6 Spring Cloud整合RocketMQ 251 9.7 RocketMQ監控與運維命令 258 9.7.1 RocktetMQ監控平臺搭建 258 9.7.2 RocketMQ管理命令 261 9.8 應用場景分析 280 9.9 本章小結 281 附錄A 參數說明 282 本書由RocketMQ社區早期的布道者和技術專家撰寫,Apache RocketMQ創始人/Linux OpenMessaging創始人兼主席/Alibaba Messaging開源技術負責人馮嘉對其高度評價并作序推薦。
源碼角度:本書對RocketMQ的核心技術架構,以及消息發送、消息存儲、消息消費、消息過濾、順序消息、主從同步(HA)、事務消息等主要功能模塊的實現原理進行了深入分析,同時展示了源碼閱讀的相關技巧;應用層面:本書總結了大量RocketMQ的使用技巧。通過閱讀本書,讀者將深入理解消息中間件和底層網絡通信機制的核心知識點。 全書共10章,分三個部分: 第一部分 準備篇(第1章) 首先介紹了RocketMQ源代碼的獲取、結構和調試,然后介紹了RocketMQ的設計理念和目標。 第二部分 實現篇(第2~8章) 這是本書的核心部分,從源代碼的角度詳細分析了消息發送、消息存儲、消息消費、消息過濾、順序消息、主從同步(HA)、事務消息等主要功能模塊的架構設計和實現原理。 第三部分 實例篇(第9~10章) 通過示例展示RocketMQ的使用技巧,并著重講解了RocketMQ的監控命令與監控管理界面。 為什么要寫這本書
隨著互聯網技術蓬勃發展,微服務架構思想的興起,系統架構開始追求小型化、輕量化,原有的大型集中式的IT系統通常需要進行垂直拆分,孵化出顆粒度更小的眾多小型系統,因此對系統間松耦合的要求越來越高,目前RPC、服務治理、消息中間件幾乎成為互聯網架構的標配。 引入消息中間件,服務之間可以通過可靠的異步調用,降低系統之間的耦合度,提高系統的可用性。消息中間件的另一個重要應用場景是解決系統之間數據的一致性(最終一致性)。 RocketMQ作為阿里開源的一款高性能、高吞吐量的消息中間件,承載了阿里“雙11”大部分業務,可以說是一名久經戰場的“精英”、值得信任的“伙伴”。同時它的開發語言為Java,自然而然地得到了廣大互聯網架構師們的青睞,成為互聯網行業首選的消息中間件。 初次接觸RocketMQ是在聽到阿里巴巴正式將RocketMQ捐獻給Apache基金會,成為Apache的頂級開源項目時,這意味著承載阿里“雙11”巨大流量的消息中間件完全走向開源,對廣大Java開發者來說無疑是一個巨大的利好,讓我們有機會一睹高性能消息中間件RocketMQ的“真容”。作為一名阿里技術崇拜者,我內心異常激動,于是不假思索地在CSDN上開通了專欄“源碼研究RocketMQ”,受到了廣大技術朋友的支持。 RocketMQ作為一款高性能消息中間件,其核心優勢是可靠的消息存儲、消息發送的高性能與低延遲、強大的消息堆積能力與消息處理能力、嚴格的順序消息模式等。RocketMQ的另一個核心思想是懂得取舍。軟件設計不可能做到面面俱到,消息中間件的理想狀態是一條消息能且只能被消費一次,但要做到這一點,必然需要犧牲性能。RocketMQ的設計者解決這一難題的辦法是不去解決,即保證消息至少被消費一次,但不承諾消息不會被消費者多次消費,其消費的冪等由消費者實現,從而極大地簡化了其實現內核,提高了RocketMQ的整體性能。 自從RocketMQ被捐獻給Apache基金會后便在快速發展,RocketMQ的設計者們正在制定消息中間件的新規范,其模塊為openmessaging。本書主要是拋磚引玉,與各位讀者朋友們探討RocketMQ的實現原理,使讀者能更好地在實際項目中應用RocketMQ。 讀者對象 RocketMQ用戶和愛好者 RocketMQ代碼開發志愿者 Java中高級開發工程師 Java架構師 有志于從事Java開源的相關技術從業者 本書特色 本書從源碼的角度對RocketMQ的實現原理進行詳細剖析,從中闡述了作者學習閱讀源碼的方法。本書作為一本源碼閱讀類書籍,其講解切入點并不是以組成RocketMQ的一個個源碼包進行展開,而是基于功能模塊(如Topic路由中心、消息發送、消息存儲、消息消費、事務消息)來展開,更加貼近實戰需求。 如何閱讀本書 本書分為三大部分。 第一部分為準備篇(第1章),簡單介紹了RocketMQ的設計理念與目標,并介紹了在開發工具中如何對RocketMQ進行代碼調試。 第二部分為實現篇(第2~8章),重點講解了RocketMQ各個功能模塊的實現原理,包括NameServer、消息發送、消息存儲、消息消費、消息過濾、順序消息、事務消息等。 第三部分為實例篇(第9章),通過示例展示RocketMQ的使用技巧,著重講解了RocketMQ的監控命令與監控管理界面。 本書在最后的附錄中給出了RocketMQ的主要參數列表及含義,供讀者參考。 本書的行文思路主要是根據消息發送的全流程進行展開,從路由管理到消息發送、消息存儲、消息消費,再到順序消息、事務消息,從而實現消息鏈路的閉環。建議讀者按照該思路,帶著問題來閱讀本書,或許會事半功倍。 勘誤和支持 除封面署名外,參加本書編寫工作的還有陳鵬飛。由于水平有限,編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,大家可以通過CSDN博客專欄(https://blog.csdn.net/column/details/20603.html)留言反饋。書中的全部源文件可以從github rocketmq官方倉庫中下載,我也會將相應的功能及時更新。如果你有更多的寶貴意見,也歡迎發送郵件至dw19871218pmz@126.com,期待能夠得到你的真摯反饋。 致謝 首先要感謝MyCAT開源社區負責人周繼鋒對我的提攜與指導,為我的職業發展指明前進的方向。 感謝RocketMQ聯盟中每一位充滿創意和活力的朋友——奔騰、zenk、共產國際史派克、水動力皮劃艇、張登、張鳳凰、曾文、季永超,以及名單之外的很多朋友,感謝你們對我的支持與幫助。感謝楊福川老師的引薦,是你的努力才促成了本書的成功出版。 感謝機械工業出版社華章公司的編輯張錫鵬,在這一年多的時間中始終支持我的寫作,你的鼓勵和幫助引導我能順利完成全部書稿。 最后感謝我的爸爸、媽媽、爺爺、奶奶,感謝你們將我培養成人,并時時刻刻為我灌輸著信心和力量!感謝我的老婆、女兒,你們是我持續努力的最大動力。 謹以此書獻給我最親愛的家人,以及眾多熱愛RocketMQ的朋友們! 丁威 感謝RocketMQ團隊,是你們的付出才有這么好的產品,同時感謝楊福川編輯對本書出版工作的支持。 謹以此書獻給我最親愛的家人和同事,以及幫助過、關注過我的人,以及使用、學習過RocketMQ的朋友們! 周繼鋒 |