Spring-Cloud Eureka
Eureka
在技术交流群、论坛、博客经常看到一群大?发表spring-cloud的相关文章,这些东西到底是啥玩意,这个市场上这么火热、??,自己没用过心里面很慌,所以抓紧时间赶快学习一下spring-cloud相关技术点,下面分享一下学习spring-cloud eureka的心得。
虽然网上很多大?写了很多关于spring-cloud eureka很优秀的论坛,写的没有那些大?好。萤火之光也不敢与日月争辉,自己按照自己思路写一遍加深印象,哈哈!
1.Eureka-Client
1.1加载配置信息
加载配置信息就是将application.yml文件中的eureka-client配置相关节点信息转换成bean,然后托管到spring容器中。
- 我们先找到spring-cloud-netflix-eureka-client.jar 这个包,然后找到META-INF/spring.factories这个文件,找到spring-cloud-netflix-eureka-client 启动加载类
- 打开spring.factories找到启动类[EurekaClientAutoConfiguration],这个就是加载配置文件的的启动类
- 以上代码就是读取配置文件的代码片段
1.2服务信息拉取
在【EurekaClientAutoConfiguration.java]文件中找到这段代码,我们从这里开始阅读
- 进去可以看private final EurekaClient eurekaClient ,我们在看看EurekaClient定义。
- 我们发现Eureka-Client还是一个接口,DisconveryClient实现了它,主意一下这个DisconveryClient跟刚才说到 DisconveryClient不是一个东西,刚才一个是一个接口,这个DisconveryClient是一个类,别混淆了
- 所以接下来我们重点看看DisconveryClient这个类里面的东西,我们想看DiscoveryClient的构造方法
- 构造方法里面的前面一些代码,我们就不看了,直接看关键代码
- fetchRegistry()这个就是拉去Server注册列表的方法,跟进去看看
- 这个拉取分全量拉取和增量拉取,里面的代码就不截图了,可以自己跟进去看看,这个里面用了jersey这个东东。
1.3服务注册
7. 条件判断是否需要将当前这个服务实例注册到Eureka-Server
8. 如果register-with-eureka配置为true,执行register()注册方法
1.4定时任务
9. 定时任务包括心跳任务、刷新缓存任务,这里面还用到了【ScheduledExecutorService】线程池
2.Eureka-Server
- 找到spring-cloud-netflix-eureka-server.jar META-INF/spring.factories文件,找到Eureka-Server启动类EurekaServerAutoConfiguration,我们从这里开始看
- 我们转到 InstanceRegistry->PeerAwareInstanceRegistryImpl->AbstractInstanceRegistry->InstanceRegistry
->LeaseManager,我们看看LeaseManager这个接口定义
- 是不是一下子跟上面的功能点对上了,我把这些类的集成关系图贴一张出来,所有的功能点的核心代码写在【AbstractInstanceRegistry】类,接下来我们直接去AbstractInstanceRegistry找我们想要知道的东西
2.1接受服务注册
2.2接受心跳服务
2.3服务剔除
有一些网络波动,服务端长时间没有收到服务的心跳信息,服务就会把这个服务实例剔除掉,这个是服务端主动操作
2.4服务下线
客户端服务实例主动发送消息给服务端,要求停止服务实例,这个操作是被动操作
2.5集群同步
服务集群同步方法写在[PeerAwareInstanceRegistryImpl]类里面,方法名称[syncUp]
13. 通过上面这段代码EurekaServer启动时候能保证数据一致性,这里有一个问题Eureka-Server运行后,Eureka-Server之间注册表信息是如何同步复制的???
本人是一个小白,看了老师们讲的这方面的课程,自己想整理一下思路加深印象,大概知道Eureka-Client、Eureka-Server有哪些功能点,每个功能点大概是如何实现的!