前面的话:
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