eureka server启动源码分析

基于之前分析的eureka为什么保证ZP和zookeeper为什么保证CP的理解上,本文在分析eureka server端启动源码上去尝试去理清启动流程都做了那些事。

1、基于自动装配的eureka配置类(EurekaServerAutoConfiguration)

spring boot 自动装配原理就不多说了直接搜spring.factoris文件,找到spring-cloud-netflix-eureka-server 包中

进入该类首先看到的依然是不可缺少的@import,@ConditionalOnBean

2、启动事件下发

先看@import导入的EurekaServerInitializerConfiguration干了什么

重写了一个父类的start方法,主要作用是启动一个线程去下发各种事件,并且将running设置为true。可以理解为启动事件的下发。

再看@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)

只是判断容器中是否存在EurekaServerMarkerConfiguration.Marker,这个marker字面意思是一个标记,这个标记是与eureka server启动类上相呼应

在启动类上的@EnableEurekaServer注解中有@Import(EurekaServerMarkerConfiguration.class),所以如果启动类加@EnableEurekaServer 则会将Marker初始化,在这里的时候则需要加载eureka server配置类。

3、初始化dashboard

在往下看@ConditionalOnProperty判断配置是否生效,这里判断eureka.dashboard 是否开启,默认开启。

4、初始化集群注册列表和集群节点对象

peerAwareInstanceRegistry主要用来初始化集群列表对象,peerEurekaNodes用来初始化集群节点对象,对象的初始化不做过多赘述。

5、初始化eurekaServer上下文对象(更新缓存信息)

这里初始化DefaultEurekaServerContext对象,该对象有一个被@PostConstruct声明的initialize方法。

该方法主要做两件事,peerEurekaNodes.start启动更新其他节点信息任务,

registry.init会初始化二级缓存,启动续约定时任务,初始化region的注册。

eureka server二级缓存是eureka AP的一部分设计,避免多个服务进行注册和更新的时候产生并发问题,而eureka为了保证AP使用只读缓存和读写缓存来进行隔离,两个缓存之间通过任务去更新保证最终一致性即可。

6、初始化启动类EurekaServerBootstrap(同步节点信息,更新续约和服务剔除)

public void contextInitialized(ServletContext context) {
		try {
			initEurekaEnvironment();
			initEurekaServerContext();

			context.setAttribute(EurekaServerContext.class.getName(), this.serverContext);
		}
		catch (Throwable e) {
			log.error("Cannot bootstrap eureka server :", e);
			throw new RuntimeException("Cannot bootstrap eureka server :", e);
		}
	}

EurekaServerBootstrap主要做两件事

initEurekaEnvironment 初始化运行环境

initEurekaServerContext 初始化上下文信息

initEurekaEnvironment初始化运行环境 这里只看到打了一行日志。。。

	protected void initEurekaEnvironment() throws Exception {
		log.info("Setting the eureka configuration..");
	}
initEurekaServerContext则会做两件事
registry.syncUp 获取集群中其他节点信息进行同步

registry.openForTraffic 会更新续约,如果有不可用的服务则会进行剔除。

7.eureka 注册 

这里承接下上面说到的服务注册,具体流程

后面就是往队列添加注册实例和更新缓存的操作, 

7、eureka 注册 

这里承接下上面说到的服务注册,具体流程

图片

后面就是往队列添加注册实例和更新缓存的操作, 

注册流程使用读锁来阻塞写操作,先从currentHashmap中根据appName获取一个map,然后再根据服务id从map中获取,并且与当前服务的dirtyTime进行对比,哪一个最新则使用那个,就算一样也是用远程的。

8、续约

图片

续约流程跟注册差不多,只不过最后更新续约时间。

以上就是eureka server 启动的大致流程,根据启动相关源码的梳理我画了一个大概流程图,具体如下。

关注我的公众号 LearnMoreDoMore 可以及时看到更多技术分享文章

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值