目录
1、eureka的项目分析
2、其实,我就是个web工程
eureka,是springCloud生态中的负责构建服务注册与发现的注册中心组件。本文,通过从eureka的项目结构出发,一点点去剖析eureka的源码。
1、eureka的项目分析
既然要看源码一定是先把代码拉到本地,GitHub地址【https://github.com/Netflix/eureka】,本文基于1.7.3版本去分析。基于Gradle一通build之后,我们可以看到项目结构。
先简单分析一下几个要看的项目目录:
eureka-client:eureka客户端相关代码逻辑和配置
eureka-server:eureka服务端,其实就是一些配置文件,重点去分析他的打包配置文件。
eureka-resources:eureka注册中心控制台页面
eureka-examples:eureka的客户端功能的测试例子,可以都跑跑看
eureka-core:eureka封装的一些核心功能,注册中心和服务客户端的交互很多都封装在里面
eureka-core-jersey2&eureka-client-jersey2:eureka是基于jersey2封装的一套用于客户端和注册中心服务端的请求交互的MVC层逻辑。
那我们来看看eureka-server的build.gradle文件,通过观察打包的过程来看看各个module之间的依赖关系。
eureka-server实现依赖了eureka-client模块,这个必须的,毕竟eureka-server本身也可以作为eureka-client去向另外一台eureka-server进行注册,组成集群模式的注册中心。
eureka-core模块也毋庸置疑需要依赖的。很多注册中心相关的核心功能都封装在其中。并且eureka-core也去依赖了eureka-client工程。
然后可以看到依赖了jersey2,一个类似于SpringMVC的MVC框架,对外提供restful请求。基于这个框架,eureka-server就可以将eureka-core中的注册中心功能暴露出去给客户端访问。由此,我们也可以明确eureka是基于http请求通信的。
然后就是把eureka-resources下的一些jsp,js,css文件都打包进去,最终就形成了一个war包。
02
其实,我就是个web工程
在eureka-server的module中,我们可以看到一个很关键的配置文件,那就是web.xml。我们可以确定eureka-server打成一个war包之后,就和我们平时写的web工程一样。最终交由web容器例如tomcat来运行。所以eureka-server也没有那么神秘,我们慢慢来看eureka的各种配置和操作。
我们先从web.xml文件入手,来看看整个web应用启动的时候都做了什么?
首先映入眼帘的是listener配置,当web容器启动的时候回去加载listener配置的类,这里配置了一个EurekaBootStrap类,这个类可以说很关键,整个eureka的启动初始化都可能在这个类中完成,我们后面的分析也会从这个类展开。
紧接着就是几个filter,StatusFilter,状态过滤器;ServerRequestAuthFilter,请求认证相关的过滤器;RateLimitingFilter,限流过滤器;GzipEncodingEnFocingFilter,解压缩相关的过滤器。这几个过滤器都在core包下面,从下图也可以看出来各个过滤器作用的路径,并且限流过滤器默认是不开的。我们后面可以去一一分析一下他们具体的作用。
还有一个MVC相关的核心过滤器,jersey的核心过滤器,这个一定和其他的MVC框架的核心过滤器一样都会接管所有的请求并处理,如下图,还配置一些参数的初始化。
如下图我们也可以看到整个jersey过滤器拦截了全部的url,而且,我们在这里也可以看到默认的欢迎页面就是status.jsp,也就是我们在eureka控制台页面看到的哪些就是这个jsp提供的。
上面一套配置文件看下来,我们对整个eureka工程就有了大概的了解,后面的解读也能够顺着文中的思路去慢慢分析,一步步去展开eureka的架构设计和原理。谢谢大家阅读,文中有不正确的地方,欢迎留言,指正,批评。