eureka是一种去中心化的服务治理应用,其显著特点是既可以作为服务端又可以作为服务向自己配置的地址进行注册。那么这篇文章就来探讨一下eureka的注册流程。
一、Eureka的服务端
eureka的服务端核心类是EurekaBootstrap,该类实现了一个ServletContextListener的监听器。因此我们可以断定eureka是基于servlet容器实现的。关键代码如下:
publicclass EurekaBootStrapimplements ServletContextListener {//...省略相关代码 /** * Initializes Eureka, including syncing up with other Eureka peers and publishing the registry. * *@see * javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)*/ @Overridepublicvoid contextInitialized(ServletContextEvent event) {try { initEurekaEnvironment(); initEurekaServerContext(); ServletContext sc= event.getServletContext(); sc.setAttribute(EurekaServerContext.class.getName(), serverContext); }catch (Throwable e) { logger.error("Cannot bootstrap eureka server :", e);thrownew RuntimeException("Cannot bootstrap eureka server :", e); } }
//省略相关代码..... }
我们可以看到在ServletContext初始化完成时,会初始化Eureka环境,然后初始化EurekaServerContext,那么我们在看一看initEurekaServerContext方法:
/** * in