如何吃透一個java項目
見字如面,我是威哥,一個從普通二本院校畢業,從未曾接觸分布式、微服務、高并發到通過技術分享實現職場蛻變,成長為RocketMQ社區優秀布道師、大廠資深架構師,出版《RocketMQ技術內幕》一書,歡迎大家關注我,隨時可私信我,一起交流進步。
我在嘗試學習RocketMQ之前未曾接觸過消息中間件,通過自己提煉的學習方法,最終出版《RocketMQ技術內幕》一書,并且成為RocketMQ社區優秀布道師,讓我有了一個非常亮眼的標簽,極大了提高的我的職場競爭力,在這里和大家分享一下我的方法。
我根據多年的閱讀經驗,整理了這么一套方法:
了解這款軟件的使用場景、以及架構設計中將承擔的責任。
尋找官方文檔,從整體上把握這款軟件的設計理念。
搭建自己的開發調試環境,運行官方提供Demo示例,為后續深入研究打下基礎。
先主干流程再分支流程,注意切割,逐個擊破。
接下來分享一下我在閱讀 RocketMQ 源碼時的一些經歷,盡量讓上述理論具有畫面感。
1、了解 RocketMQ的應用場景
MQ的使用場景是比較清晰的,它的兩大基本職責是解耦與削峰填谷。
舉一個最簡單的場景:新用戶注冊送積分、送優惠券場景,其原始架構設計通常如下:
可以看出用戶注冊和發優惠券,送積分是緊耦合的, 隨著業務不斷發展,活動部門提出在春節期間用戶注冊不送積分,發優惠券,而是贈送一個新春禮包,如果基于上述架構的話,需要去改動用戶注冊的主流程,違背了設計模式中的對修改關閉、對擴展開放的設計理念。
MQ的出現,可以很好地解決上面的問題:
通過引入MQ,用戶注冊主流程只需要完成注冊邏輯,并向MQ發送一條消息,然后活動模塊(送積分、送優惠券、送禮包)只需要訂閱MQ中的消息,進行對應的處理。
這樣消息注冊主流程會非常的簡單,不管活動種類如何變化,注冊流程無需更改,這樣就實現了解耦。
2 通讀官方文檔,從全局把握其設計理念
了解使用場景以后,接下我們可以去查閱官方文檔,主要包括用戶設計文檔(架構設計),用戶使用手冊等,從全局了解其設計理念。
通過通讀官方文檔,不僅可以得出MQ的整體脈絡(例如NameServer路由發現、消息發送、消息存儲、消息消費、消息過濾),也能對順序消費,零拷貝、同步刷盤、異步刷盤等“高端大氣上檔次”的高級特性產生興趣與好奇,驅動我們去閱讀其源碼,探究其實現細節,使得我們在閱讀源碼中進行一定的自我思考成為了可能。
3、搭建開發調試環境
不同的系統搭建方式也不同,我這里有一篇文章,手把手教你搭建RocketMQ調試環境,這里就不細說了。
4 先主干,再分支
在搭建好本地開發環境后,切忌直接用Debug去跟蹤消息發送的整體流程,因為這個流程實在是太長了,從比較粗粒度來看其流程如下圖所示:
如果大家想一次性將上述流程的源碼全部看一遍,幾乎是不可能的。 因為消息發送高可用設計、消息存儲、刷盤、同步等機制,每個點詳細展開的工作都是海量的,我們沒有這么多連續的時間,所以適當的拆分非常有必要。
經過這樣一分解,就能專注理解其某一塊的設計原理,所需要的連續時間也能大大減少,一口一口“吃”,最終完成整個體系的理解。
好了,本文就介紹到這里了,您的一鍵三連是對我最大的鼓勵,當然可以加筆者微信:dingwpmz,備注CSDN,共同交流探討。
Java 架構設計
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。