前面我们了解完了eureka client的源码,我们接下来了解下server端的源码,server端主要是用于服务的发现,高可用,客户端异常如何实现自我保护机制,我们还是首先通过META-INFO下的spring.factories了解到入口类是EurekaServerAutoConfiguration,通过下图可以看到该类的结构如下
在类中实现了很多bean的初始化,下面我们看下它是如何实现高可用的。
进入到EurekaServerContext对应的bean方法中,它返回了一个默认的DefaultEurekaServerContext类,进入到该类可以立即看到它实现了一个initialize()方法,在这个方法中调用了PeerEurekaNodes类的 start()方法,这里需要说明的是因为eureka是C(最终一致性)A(可用性)P(分区容错性)理论中的AP,因此各个服务节点是平等的,没有主从节点的说法,进入到start()方法它有这样一段代码
updatePeerEurekaNodes(resolvePeerUrls());
Runnable peersUpdateTask = new Runnable() {
@Override
public void run() {
try {
updatePeerEurekaNodes(resolvePeerUrls());
} catch (Throwable e) {
.....
}
}
};
taskExecutor.scheduleWithFixedDelay(
peersUpdateTask,
serverConfig.getPeerEurekaNodesUpdateIntervalMs(),
serverConfig.getPeerEurekaNodesUpdateIntervalMs(),
TimeUnit.MILLISECONDS
);
resolvePeerUrls()方法通过去获取eureka.client.serviceUrl的配置服务端地址列表,然后将该列表传递给updatePeerEurekaNodes()方法,我们看下updatePeerEurekaNodes()方法
Set<String> toShutdown = new HashSet<>(peerEurekaNodeUrls);
toShutdown.removeAll(newPeerUrls);
Set<String> toAdd = new HashSet<>(newPeerUrls);
toAdd.removeAll(peerEurekaNodeUrls);
if (toShutdown.isEmpty() && toAdd.isEmpty()) { // No change
return;
}
// Remove peers no long available
List<PeerEurekaNode> newNodeList = new ArrayList<>(peerEurekaNodes);
if (!toShutdown.isEmpty()) {
...
int i = 0;
while (i < newNodeList.size()) {
PeerEurekaNode eurekaNode = newNodeList.get(i);
if (toShutdown.contains(eurekaNode.getServiceUrl())) {
newNodeList.remove(i);
eurekaNode.shutDown();
} else {
i++;
}
}
}
// Add new peers
if (!toAdd.isEmpty()) {
...
for (String peerUrl : toAdd) {
newNodeList.add(createPeerEurekaNode(peerUrl));
}
}
this.peerEurekaNodes = newNodeList;
this.peerEurekaNodeUrls = new HashSet<>(newPeerUrls);
在方法中使用了toShutdown和toAdd的2个set变量,toShutdown初始化的数据是已经存在过的节点数据url地址,它把现有的节点数据删除,那么剩下的就是需要删除的节点数据了,而toAdd的初始化数据是现有的节点数据url地址,它把已经存在的节点数据删除,那么剩下的就是新增的节点数据了,接下来初始化newNodeList的节点数据,删除满足在toShutdown的set集合中url地址对应的节点,同时关闭节点相关的操作,对于新增的节点,则先通过去创建一个HttpReplicationClient对象,该对象是用于向其他服务端的注册的jersy对象,然后再创建一个PeerEurekaNode对象,然后保存到newNodeList的节点,最后给全局对象进行赋值操作,该全局对象在前面已经提到过作用。
通过以上的分析我们就明白了eureka的服务发现和服务高可用的状态的实现,接下来文章我们在分析其他的实现。
相关推荐
Spring Cloud Eureka源码分析
为什么要看源码: 1、提升技术功底:学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提 升自己的技术功底 2、深度掌握技术框架:源码看多了,对于一个新技术或框架的掌握速度会有...
负载均衡器源码分析 33 负载均衡器重试机制 33 服务保护机制SpringCloud Hystrix 33 微服务高可用技术 33 服务降级、熔断、限流概念 34 服务学崩效应 34 服务降级 34 服务熔断 35 服务隔离 35 服务限流 36 ...
spring cloud组件源码分析,包括Eureka,feign,gateway,ribbon,Hystrix组件
本文将从SpringCloud源码角度出发,让大家能够了解到相关组件内部的运行机制,从而更好的回馈开发的流程和配置上,为用户提供更好的方案。SpringCloud提供了微服务架构中的众多组件,例如API网关、注册中心、负载...
资源名字:基于Springcloud+mysql的分布式架构网上商城设计与实现(源码+设计文档+部署说明+视频演示).zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 基于...
基于SpingBoot+SpringCloud+Maven+Eureka+Vue的分布式架构网上商城系统源码+数据已获导师指导。 本项目是一套基于SpringCloud的分布式架构网上商城系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战...
面试必考之HashMap源码分析与实现 ,微服务架构之Spring Cloud Eureka 场景分析与实战,高性能必学之Mysql主从架构实践 ,架构师不得不知道的Spring事物不能回滚的深层次原因 ,分库分表之后分布式下如何保证ID全局...
视频讲解知识内容包括:HashMap源码分析与实现、JVM底层奥秘ClassLoader源码分析与案例讲解、大型网站数据库瓶颈之数据库分库分表方案实践、Spring Cloud Eureka场景分析与实战、分库分表之后分布式下如何保证ID全局...
前文 SpringCloud 简介 SpringCloud 版本选型 SpringCloud 工程构建 SpringCloud —— Eureka 注册中心 SpringCloud —— Eureka 集群 ...文章目录前文Ribbon 负载均衡原理Ribbon 源码分析RoundRo
Spring全家桶源码分析 Tomcat架构原理 Web请求处理原理 数据访问层框架原理 架构与设计思维模式 程序中的数学 数据分析 机器智能算法剖析与应用 云原生 自动化DevOps 流量治理 链路监控 弹性扩容 分布式存储Redis6.0...
应用Spring Cloud Eureka作为服务注册中心 应用Spring Cloud Zuul作为网关分发请求 应用MyBatis-Plus作为持久层框架 使用Ribbon实现了负载均衡技术,自定义均衡算法 拆分Spring Security成单独微服务作为权限验证...
java版商城源码下载 关于作者 前腾讯、前阿里员工,从事Java后台工作; 对Docker和Kubernetes充满热爱...Eureka源码分析专题 spring-cloud-alibaba实战 ; ; ; ; ; spring-cloud-kubernetes特辑 dubbo实战特辑 Docke
2017卧底面试题答案解析.txt...微服务架构之Spring Cloud Eureka 场景分析与实战 高性能必学之Mysql主从架构实践 架构师不得不知道的Spring事物不能回滚的深层次原因 大型公司面试必答之数据结构与算法精讲 ... 等
java版商城源码下载 关于作者 ...前腾讯、前阿里员工,从事Java后台工作; 对Docker和Kubernetes充满热爱;...Eureka源码分析专题 spring-cloud-alibaba实战 ; ; ; ; ; spring-cloud-kubernetes特辑 Docker 基础知
java版商城源码下载 关于作者 ...前腾讯、前阿里员工,从事Java后台工作; 对Docker和Kubernetes充满热爱;...Eureka源码分析专题 spring-cloud-alibaba实战 ; ; ; ; ; spring-cloud-kubernetes特
【原始笔记】专注于Java... SpringCloud(Eureka,Ribbon,Hystrix,Zuul,Config,Feign ...) 四郎 Tomcat 西塔 运河 联合会 卡夫卡 纳科斯 动物园管理员 我的猫 ...... 微信搜: 公众号:原始笔记 联系我:艰苦奋斗
10.微服务架构之Spring Cloud Eureka 场景分析与实战 11.高性能必学之Mysql主从架构实践 13.RPC底层通讯原理之Netty线程模型源码分析 14.分库分表之后分布式下如何保证ID全局唯一性 10道腾讯的Java面试题.txt Dubbo...
│ │ 13.RPC底层通讯原理之Netty线程模型源码分析.wmv │ │ │ ├─14.分库分表之后分布式下如何保证ID全局唯一性 │ │ 14.分库分表之后分布式下如何保证ID全局唯一性.mp4 │ │ │ └─15.大型公司面试必答之...