前面的話:
SpringCloud Eureka的用法相對比較簡單,這裏就不講了,可以參考官方文檔搭建一個EurekaServer測試一下。我覺得能看到這篇文章的人肯定也是想看一下源碼方面的知識,一起思考和學習。
1.EurekaServer web.xml
EurekaServer web.xml源碼主要內容如下:
<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>
我們大致猜測一下:
- StatusFilter:負責狀態相關的處理邏輯
- ServerRequestAuthFilter:一看就是,對請求進行授權認證的處理的
- RateLimitingFilter:負責限流相關的邏輯的(很有可能成爲eureka-server裏面的一個技術亮點,看看人家eureka-server作爲一個註冊中心,是怎麼做限流的,先留意算法是什麼,留到後面去看)
- GzipEncodingEnforcingFilter:gzip,壓縮相關的;encoding,編碼相關的
2.關於EurekaBootsTrap
從上面的web.xml我們可以分析出來,有一個ListenerClass即:EurekaBootStrap會啓動
<listener>
<listener-class>com.netflix.eureka.EurekaBootStrap</listener-class>
</listener>
那麼我們接下來分析一下這個EurekaBootStrap,首先執行的方法是contextInitialized
這個方法
public void contextInitialized(ServletContextEvent event) {
try {
initEurekaEnvironment();
initEurekaServerContext();
ServletContext sc = event.getServletContext();
sc.setAttribute(EurekaServerContext.class.getName(), serverContext);
} catch (Throwable e) {
......
}
}
我們猜測一下上面代碼中主要的兩個方法作用:
initEurekaEnvironment()
:初始化Eureka環境
initEurekaServerContext()
:初始化Eureka服務上下文
3.總結
- 簡單介紹了web.xml
- 瞭解到了
EurekaBootStrap
是核心入口 - 瞭解到了
EurekaBootStrap
的主要的初始化方法contextInitialized