本文优点:按着步骤操作可以串起来
注册中心分两部分,eureka-server和eureka-client
一.概述:
1.eureka-server:主要维护了eureka-client的服务地址信息,用的双层map,然后其实就是提供了对这个map的增删查改接口,如:注册(添加),获取服务(查询),续约(更新过期时间),剔除(删除),同步(初始全量获取,新注册剔除会同步),并加了两级缓存,同步和剔除起了两个任务
2.eureka-client:主要就是服务注册,获取任务(全量,增量),续约任务
二.eureka-server代码梳理
1.找到eureka-server的pom依赖
<dependencies> <!--Eureka 服务注册中心 start--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--Eureka 服务注册中心 end--> </dependencies>
2.点击spring-cloud-starter-netflix-eureka-server,找到如下依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-eureka-server</artifactId> </dependency>
3.搜索spring-cloud-netflix-eureka-server,并点进去
4.找到包下的spring.factories,找到EnableAutoConfiguration下的EurekaServerAutoConfiguration,并点击进去,这个类是eureka-server的自动装载类,下边分析这个类怎么被加载的
PS:需要了解点spring boot自动装载知识
5.找到spring boot启动类,点击@SpringBootApplication注解
6.找到@EnableAutoConfiguration注解,并点击
7.找到如下@Import({AutoConfigurationImportSelector.class}),点击类
8.AutoConfigurationImportSelector类实现了ImportSelector接口,这个接口就是手动注入bean的接口
PS:这里需要了解spring前置知识
下边的图1是AutoConfigurationImportSelector类图
点击红框方法进去,这里扫描了META-INF下的spring.factories,这里便扫描了步骤4的内容
selectImport方法是在refresh的invokeBeanFactoryPostProcessors中调用的,如下:
9.进入EurekaServerAutoConfiguration类,@ConditonalOnBean就是后边的Marker类存在则加载本类,进入程序启动类,点击@EnableEurekaServer注解,这里加载了Marker类,所以这个注解是开启eureka-server.
进入程序启动类,点击@EnableEurekaServer
点击EurekaServerMarkerConfiguration
如下类注入了Marker,则激活了EurekaServerAutoConfiguration类(eureka-server自动装配类)
10.进入EurekaServerAutoConfiguration类
找到eurekaServerBootstrap方法,然后搜索PeerAwareInstanceRegistry注入的地方
11.找到PeerAwareInstanceRegistry,点击new InstanceRegistry方法,一直点super方法,最终定位到AbstractInstanceRegistry类,这个类中提供了注册,续约,服务获取,剔除等方法,如下图
12.服务同步和剔除任务则在如下Import的红框类中,这个类实现了SmartLifecycle接口,则在bean装载并初始化完后执行start方法
下图中sysup是服务同步方法,this.registry.openForTraffic方法则是启动剔除服务
三.eureka-client代码分析
略