項(xiàng)目骨架,開整!
上一篇環(huán)境搭建好之后,我們的項(xiàng)目終于要開工了。開工前需要給項(xiàng)目取個高大上的名字,經(jīng)過我反復(fù)思考(這也許是拖更的重要原因)最終確定為:easy-rpc。
看起來很隨意,其實(shí)蘊(yùn)含了豐富的含義:easy 代表這個項(xiàng)目上手很容易,大家很容易學(xué)會;easy 也代表這個項(xiàng)目就是簡單造輪子用的,不可用于生產(chǎn)環(huán)境,出問題別找我,hhhhhhhhh
設(shè)計項(xiàng)目結(jié)構(gòu)
在實(shí)際工作中很少會采用單一的 Maven 工程結(jié)構(gòu),尤其是遇到業(yè)務(wù)復(fù)雜的項(xiàng)目幾乎都是采用多 module 結(jié)構(gòu),這樣不光層次清晰,單個 module還可以發(fā)布為三方件供其他項(xiàng)目依賴復(fù)用。
如果你對設(shè)計項(xiàng)目結(jié)構(gòu)還是沒有很好的思路,有一個很簡單的辦法,去 Github 下載開源的框架源碼,學(xué)習(xí)借鑒一下。
我們這次的項(xiàng)目是動手?jǐn)]一個 RPC 框架,而國內(nèi)比較流行的框架有阿里的 Dubbo,自然而然想到參考一下它的結(jié)構(gòu),下面的截圖是 Dubbo 框架的源碼結(jié)構(gòu):

可以看出,一個父模塊下面有個多個子模塊,通過命名也非常容易看出每個模塊的功能。
我們的 RPC 項(xiàng)目只需要實(shí)現(xiàn)最基礎(chǔ)的功能,肯定不能跟成熟的 Dubbo 框架比,所以結(jié)構(gòu)上也必要那么復(fù)雜。下面設(shè)計一下 easy-rpc 項(xiàng)目結(jié)構(gòu):
easy-rpc
├──?easy-rpc-spring-boot-starter
├──?easy-rpc-example
│???├──?easy-rpc-example-consumer
│???├──?easy-rpc-example-provider
父模塊下面有兩個子模塊:
easy-rpc-spring-boot-starter 是核心框架代碼,easy-rpc 所有的功能代碼都會放在這里面。為了便于后續(xù)集成到項(xiàng)目中,我特地將 easy-rpc 框架包裝成了 spring-boot-starter,用過 spring-boot 的同學(xué)應(yīng)該都知道,spring 官方提供了眾多 spring-boot-starter-xxx,starter 就是將相關(guān)的依賴和配置放在一塊,便于開發(fā)者引用。spring 允許開發(fā)者自定義各種 starter,但是在命名上有一些建議:xxx-spring-boot-starter。
另外一個模塊 easy-rpc-example是用來測試框架用的,這里面會寫一些樣例代碼,便于大家更快上手使用easy-rpc框架。
接下來就帶領(lǐng)大家一步步創(chuàng)建項(xiàng)目骨架結(jié)構(gòu)。
搭建項(xiàng)目骨架
創(chuàng)建父模塊 Maven 工程
使用 IDEA 新建一個空的 Maven 工程,后面會創(chuàng)建幾個子Module。
操作路徑:「New Project」-> 「Maven」

注意不需要選擇任何 Maven 模板,點(diǎn)擊「Next」后填寫工程名稱和 Maven 坐標(biāo)(GAV)。

點(diǎn)擊「Finish」后會生成一個src目錄,直接刪除掉這個目錄。

創(chuàng)建子模塊 easy-rpc-spring-boot-starter
在項(xiàng)目根目錄上右鍵新建子模塊。
操作路徑:「new」-> 「Module」-> 「Maven」


同樣與父模塊一樣,填寫子模塊的工程名和 Maven 坐標(biāo)(GAV)。
這里需要注意的一點(diǎn)是:Parent 要選擇上父模塊。

創(chuàng)建子模塊 easy-rpc-example
與上面的步驟類似,繼續(xù)創(chuàng)建子模塊。

easy-rpc-example創(chuàng)建完之后會生成src目錄,這里同樣把目錄刪除。接下來會創(chuàng)建兩個子模塊。

創(chuàng)建子模塊 easy-rpc-example-provider
easy-rpc-example-provider 是模擬服務(wù)提供者,對外提供接口服務(wù)。后續(xù)會集成 easy-rpc 框架寫一個樣例。
這里注意一下,Parent 選擇 easy-rpc-example。

創(chuàng)建子模塊 easy-rpc-example-consumer
easy-rpc-example-consumer 是模擬服務(wù)消費(fèi)者,用于消費(fèi)接口。
這里注意一下,這里 Parent 同樣是選擇 easy-rpc-example。

項(xiàng)目骨架結(jié)構(gòu)展示
至此 easy-rpc項(xiàng)目基本骨架搭建完畢,我們在 IDEA 中看下效果:

以樹形展示如下:
└──?easy-rpc
????├──?easy-rpc-example??//?集成?rpc?框架的樣例
????│???├──?easy-rpc-example-consumer?//?模擬消費(fèi)者
????│???│???├──?pom.xml
????│???│???└──?src
????│???│???????├──?main
????│???│???????│???├──?java
????│???│???????│???└──?resources
????│???│???????└──?test
????│???│???????????└──?java
????│???├──?easy-rpc-example-provider?//?模擬提供者
????│???│???├──?pom.xml
????│???│???└──?src
????│???│???????├──?main
????│???│???????│???├──?java
????│???│???????│???└──?resources
????│???│???????└──?test
????│???│???????????└──?java
????│???└──?pom.xml
????├──?easy-rpc-spring-boot-starter?//?easy-rpc?框架核心代碼,也是本項(xiàng)目的重點(diǎn)
????│???├──?pom.xml
????│???└──?src
????│???????├──?main
????│???????│???├──?java
????│???????│???└──?resources
????│???????└──?test
????│???????????└──?java
????└──?pom.xml
小結(jié)
采用多模塊方式搭建項(xiàng)目其實(shí)是為了帶領(lǐng)大家了解代碼分層架構(gòu)設(shè)計的思想,代碼分層架構(gòu)設(shè)計主要是為了實(shí)現(xiàn)責(zé)任分離、解耦、組件復(fù)用和標(biāo)準(zhǔn)制定。現(xiàn)在你可能有點(diǎn)感覺了吧。
-- END --
項(xiàng)目全部搭建好了,下期開始擼代碼了。如果你對這個項(xiàng)目還不是很熟悉,推薦你把前面的內(nèi)容補(bǔ)一下《《從零開始造一個 RPC 輪子》
還可以學(xué)習(xí):
好了,今天的技術(shù)文就到這里了。我是雷小帥,一個死磕技術(shù)的理工男,如果本文對你有幫助,麻煩點(diǎn)贊、分享、在看支持一下,非常感謝~ 下期見
