入口:在eureka-server的包的META-INF下面有配置文件spring.factories文件,我们知道这个是指定要自动装配的类的文件,点进去看
有一个EurekaServerAutoConfigutation类:
我们看到其中有个注解@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)
这个注解是说需要有EurekaServerMarkerConfiguration这个bean存在才实例化,那么这个bean是哪里来的呢?这个bean是来源于启动类的@EnableEurekaServer注解:
一个服务想要成为eureka服务,那么需要在启动类上加上@EnableEurekaServer注解
看看注解是什么内容:
我们看到导入了一个EurekaServerMakerConfiguration类 :
实例化了一个Marker。
回到上面的配置类,EurekaServerAutoConfigutation,看看里面实例化了哪些bean,我们不需要每个都看,只需看一些重点的:
1.eurekaController是我们的控制台,也就是后台界面,可以通过eureka.dashboard.enabled=false关闭;
2.peerAwareInstanceRegistry:对等节点感知注册器,集群模式下各个节点是平等的,不像zookeeper那样有master
3.peerEurekaNodes,封装了对对等的操作,比如更新对等节点信息
我们点进去看看,里面有个start()方法:
5.回到主配置类中,一个人context类,注册了上下文:
里面调用了start方法:
6.回到主配置类中,FilterRegistrationBean:
7.主配置类上的注解@Import(EurekaServerInitializerConfiguration.class):
8.主配置类中有个
重点关注,进⼊
org.springframework.cloud.netflix.eureka.server.EurekaServerBootstrap#contextInitialized
重点关注initEurekaServerContext()
研究⼀下上图中的syncUp⽅法:
继续研究com.netflix.eureka.registry.AbstractInstanceRegistry#register(提供实例注册功能)
继续研究com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#openForTraffic
进⼊postInit()⽅法查看
至此,eureka启动流程就走完了。