? ??????????目錄
1、eureka的項目分析
2、其實,我就是個web工程
eureka,是springCloud生態(tài)中的負(fù)責(zé)構(gòu)建服務(wù)注冊與發(fā)現(xiàn)的注冊中心組件。本文,通過從eureka的項目結(jié)構(gòu)出發(fā),一點(diǎn)點(diǎn)去剖析eureka的源碼。
1、eureka的項目分析
既然要看源碼一定是先把代碼拉到本地,GitHub地址【https://github.com/Netflix/eureka】,本文基于1.7.3版本去分析。基于Gradle一通build之后,我們可以看到項目結(jié)構(gòu)。
先簡單分析一下幾個要看的項目目錄:
eureka-client:eureka客戶端相關(guān)代碼邏輯和配置
eureka-server:eureka服務(wù)端,其實就是一些配置文件,重點(diǎn)去分析他的打包配置文件。
eureka-resources:eureka注冊中心控制臺頁面
eureka-examples:eureka的客戶端功能的測試?yán)?,可以都跑跑?/p>
eureka-core:eureka封裝的一些核心功能,注冊中心和服務(wù)客戶端的交互很多都封裝在里面
eureka-core-jersey2&eureka-client-jersey2:eureka是基于jersey2封裝的一套用于客戶端和注冊中心服務(wù)端的請求交互的MVC層邏輯。
那我們來看看eureka-server的build.gradle文件,通過觀察打包的過程來看看各個module之間的依賴關(guān)系。

eureka-server實現(xiàn)依賴了eureka-client模塊,這個必須的,畢竟eureka-server本身也可以作為eureka-client去向另外一臺eureka-server進(jìn)行注冊,組成集群模式的注冊中心。
eureka-core模塊也毋庸置疑需要依賴的。很多注冊中心相關(guān)的核心功能都封裝在其中。并且eureka-core也去依賴了eureka-client工程。
然后可以看到依賴了jersey2,一個類似于SpringMVC的MVC框架,對外提供restful請求?;谶@個框架,eureka-server就可以將eureka-core中的注冊中心功能暴露出去給客戶端訪問。由此,我們也可以明確eureka是基于http請求通信的。
然后就是把eureka-resources下的一些jsp,js,css文件都打包進(jìn)去,最終就形成了一個war包。
02 、其實,我就是個web工程
在eureka-server的module中,我們可以看到一個很關(guān)鍵的配置文件,那就是web.xml。我們可以確定eureka-server打成一個war包之后,就和我們平時寫的web工程一樣。最終交由web容器例如tomcat來運(yùn)行。所以eureka-server也沒有那么神秘,我們慢慢來看eureka的各種配置和操作。
我們先從web.xml文件入手,來看看整個web應(yīng)用啟動的時候都做了什么?
首先映入眼簾的是listener配置,當(dāng)web容器啟動的時候回去加載listener配置的類,這里配置了一個EurekaBootStrap類,這個類可以說很關(guān)鍵,整個eureka的啟動初始化都可能在這個類中完成,我們后面的分析也會從這個類展開。
緊接著就是幾個filter,StatusFilter,狀態(tài)過濾器;ServerRequestAuthFilter,請求認(rèn)證相關(guān)的過濾器;RateLimitingFilter,限流過濾器;GzipEncodingEnFocingFilter,解壓縮相關(guān)的過濾器。這幾個過濾器都在core包下面,從下圖也可以看出來各個過濾器作用的路徑,并且限流過濾器默認(rèn)是不開的。我們后面可以去一一分析一下他們具體的作用。

還有一個MVC相關(guān)的核心過濾器,jersey的核心過濾器,這個一定和其他的MVC框架的核心過濾器一樣都會接管所有的請求并處理,如下圖,還配置一些參數(shù)的初始化。
如下圖我們也可以看到整個jersey過濾器攔截了全部的url,而且,我們在這里也可以看到默認(rèn)的歡迎頁面就是status.jsp,也就是我們在eureka控制臺頁面看到的哪些就是這個jsp提供的。

上面一套配置文件看下來,我們對整個eureka工程就有了大概的了解,后面的解讀也能夠順著文中的思路去慢慢分析,一步步去展開eureka的架構(gòu)設(shè)計和原理。謝謝大家閱讀,文中有不正確的地方,歡迎留言,指正,批評。