一、先去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上下文,最后拿到上下文,设置了一个参数。