Eureka 學習筆記(四)原生Eureka-Server啓動入口尋找

一、先去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的監聽器和五個攔截器StatusFilterServerRequestAuthFilterRateLimitingFilterGzipEncodingEnforcingFilterServletContainer。     從名字上來看,EurekaBootStrap可能是一個啓動類,StatusFilter是狀態攔截器,ServerRequestAuthFilter是和權限相關的攔截器,RateLimitingFilter經過百度翻譯是一個限流的攔截器、GzipEncodingEnforcingFilter是編碼相關的攔截器、ServletContainer是和Servlet相關的攔截器。以上僅是筆者猜測,不一定正確。==並且需要注意的是,RateLimitingFilter攔截器的filter-mapping是註釋掉的,也就是默認是不開啓的~==

三,EurekaBootStrap類查看

在這裏插入圖片描述

    可以看到EurekaBootStrapEureka-core項目中,並且實現了javax.servlet.ServletContextListener接口,這個接口是Servlet原生API的。那麼我們就可以去看一下它的contextInitialized方法了~ 在這裏插入圖片描述

    大致就是這樣,看名字是先初始化了一下環境參數,接着初始化了Server上下文,最後拿到上下文,設置了一個參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章