一、先去GitHub上下載源碼,瞄一眼目錄結構。
根據筆者小學的英文水平加上百度大概看出來,分爲code核心模塊、client客戶端模塊、server服務端模塊、resource資源模塊、examples用例、utils工具包幾個模塊吧。。
接着又發現了有這麼幾個三級項目名archaius2、jersey2、governator。經過再一次的百度查詢,發現governator
是一個用來增強 Google Guice 框架的庫、擴展和工具集,提供類路徑掃描和自動綁定、生命週期管理、配置到字段的映射、字段驗證和並行對象熱身 (parallelized object warmup).
archaius
是netflix開源的動態屬性配置框架,基於apache commons configuration, 提供在運行時獲取配置值的功能.
eureka-core-jersey2
是一個類似於SpringMvc的框架。(⊙o⊙)…一個也沒用過......
二、本着先看服務端的思想,筆者先打開了兩個服務端的項目。
突然發現`eureka-server-governator項目的readme中寫了這麼一句話,This server build is still experimental.此服務構建依然處於試驗階段。。。這時筆者也無語了,既然你是試驗階段,那就跳過吧。
沒辦法,那就看看eureka-server
項目吧~
從圖中可以看到貌似也沒有什麼代碼,就是幾個配置文件和一個測試類。接着筆者把幾個配置文件都瞄了一眼,在web.xml文件裏面發現了一些有趣的東西。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.netflix.eureka.EurekaBootStrap</listener-class>
</listener>
<filter>
<filter-name>statusFilter</filter-name>
<filter-class>com.netflix.eureka.StatusFilter</filter-class>
</filter>
<filter>
<filter-name>requestAuthFilter</filter-name>
<filter-class>com.netflix.eureka.ServerRequestAuthFilter</filter-class>
</filter>
<filter>
<filter-name>rateLimitingFilter</filter-name>
<filter-class>com.netflix.eureka.RateLimitingFilter</filter-class>
</filter>
<filter>
<filter-name>gzipEncodingEnforcingFilter</filter-name>
<filter-class>com.netflix.eureka.GzipEncodingEnforcingFilter</filter-class>
</filter>
<filter>
<filter-name>jersey</filter-name>
<filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
<init-param>
<param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
<param-value>/(flex|images|js|css|jsp)/.*</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.sun.jersey;com.netflix</param-value>
</init-param>
<!-- GZIP content encoding/decoding -->
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>statusFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>requestAuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Uncomment this to enable rate limiter filter.
<filter-mapping>
<filter-name>rateLimitingFilter</filter-name>
<url-pattern>/v2/apps</url-pattern>
<url-pattern>/v2/apps/*</url-pattern>
</filter-mapping>
-->
<filter-mapping>
<filter-name>gzipEncodingEnforcingFilter</filter-name>
<url-pattern>/v2/apps</url-pattern>
<url-pattern>/v2/apps/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>jersey</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>jsp/status.jsp</welcome-file>
</welcome-file-list>
</web-app>
從web.xml裏面可以看到,它配置了一個EurekaBootStrap
的監聽器和五個攔截器StatusFilter
、ServerRequestAuthFilter
、RateLimitingFilter
、GzipEncodingEnforcingFilter
、ServletContainer
。 從名字上來看,EurekaBootStrap
可能是一個啓動類,StatusFilter
是狀態攔截器,ServerRequestAuthFilter
是和權限相關的攔截器,RateLimitingFilter
經過百度翻譯是一個限流的攔截器、GzipEncodingEnforcingFilter
是編碼相關的攔截器、ServletContainer
是和Servlet相關的攔截器。以上僅是筆者猜測,不一定正確。==並且需要注意的是,RateLimitingFilter
攔截器的filter-mapping是註釋掉的,也就是默認是不開啓的~==
三,EurekaBootStrap類查看
可以看到EurekaBootStrap
在Eureka-core
項目中,並且實現了javax.servlet.ServletContextListener
接口,這個接口是Servlet原生API的。那麼我們就可以去看一下它的contextInitialized
方法了~
大致就是這樣,看名字是先初始化了一下環境參數,接着初始化了Server上下文,最後拿到上下文,設置了一個參數。