SpringCloud(五):Netflix Eureka源码导读与原理分析

    1. 程序构成
      1. 是纯正的 servlet 应用,需构建成war包部署 
      2. 使用了 Jersey 框架实现自身的 RESTful HTTP接口 
      3. peer之间的同步与服务的注册全部通过 HTTP 协议实现 
      4. 定时任务(发送心跳、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现
      5. 内存缓存使用Google的guava包实现
    2. 代码结构
      1. com.netflix.eureka.cluster - 与peer节点复制(replication)相关的功能 
      2. com.netflix.eureka.lease - 即”租约”, 用来控制注册信息的生命周期(添加、清除、续约) 
      3. com.netflix.eureka.registry - 存储、查询服务注册信息 
      4. com.netflix.eureka.resources - RESTful风格中的”R”, 即资源。相当于SpringMVC中的Controller 
      5. com.netflix.eureka.transport - 发送HTTP请求的客户端,如发送心跳 
      6. com.netflix.eureka.aws - 与amazon AWS服务相关的类
      7. eureka-client模块: 
        Eureka客户端,微服务通过该客户端与Eureka进行通讯,屏蔽了通讯细节
      8. eureka-server模块: 
        包含了 servlet 应用的基本配置,如 web.xml。构建成功后在该模块下会生成可部署的war包。

         

      3.代码入口
    1. 由于是Servlet应用,所以Eureka需要通过servlet的相关监听器 ServletContextListener 嵌入到 Servlet 的生命周期中。EurekaBootStrap 类实现了该接口,在servlet标准的contextInitialized()方法中完成了初始化工作:
  @Override
2
    public void contextInitialized(ServletContextEvent event) {
3
        try {
4
            // 读取配置信息
5
            initEurekaEnvironment(); 
6
            // 初始化Eureka Client(用来与其它节点进行同步)
7
            // 初始化server
8
            initEurekaServerContext(); 
9
10
            ServletContext sc = event.getServletContext();
11
            sc.setAttribute(EurekaServerContext.class.getName(), serverContext);
12
        } catch (Throwable e) {
13
            logger.error("Cannot bootstrap eureka server :", e);
14
            throw new RuntimeException("Cannot bootstrap eureka server :", e);
15
        }
16
    }

 

posted @ 2019-07-13 14:28  TangXinPing  阅读(363)  评论(0编辑  收藏  举报