1、核心功能分析

1.1、具体的功能

1.1.1 、提供接口通讯 http controller
1.1.2 、提供保存信息的服务 / 服务上线
1.1.3 、 提供下线的服务
1.1.4、提供查询的服务,根据serverName 获取服务的列表
1.1.5、提供心跳检测功能

1.2、Server 端功能

1.2.1、发布接口,等待client 端调用
1.2.2、定时任务: 根据服务最后续约时间进行范围的判断, 超过指定时间没有续约自动下线服务(删除注册信息)

1.3、Client 端功能

1.3.1、调用server 端接口,发送http 请求
1.3.2、服务启动:向Server 端发送请求,注册服务信息
1.3.3、定时发送:向服务端发送续约请求、心跳
1.3.4、主动调用:向Server 端发送查询请求。根据要调用的服务名字获取,服务列表。
1.3.5、服务关闭:向Server 端发送下线请求,删除服务信息

2、源码分析

2.1、Server 端源码

2.1.1、启动过程

spring.factory文件
@EnableEurekaServer
启动过程中的核心Bean

2.1.2、服务暴露策略

发布restful http 接口服务
提供服务的形式是通过Controller 的形式

2.1.3、注册接口 / 接受客户端请求

定位源码类 ApplicationResource #addInstance
将服务信息添加到注册表中。
注册表信息在服务的表现形式 是以Map的形式来表现的。Map>

2.1.4、接口续约 / 接受客户端请求

InstanceResource 类 #renewLease
客户端定时任务不断的向服务端发送请求

2.2、Client 端源码

2.2.1、注册服务 / 向服务发送请求

服务启动执行

服务启动的时间进行发送注册请求(读取配置文件)
spring.factory 配置文件
eureka.client.enabled=true
开启定时任务(心跳续约 刷新其他服务本地缓存列表)

2.2.2、获取服务注册信息 / 向服务发送请求

主动发送:服务调用时间:关键接口:用来负载均衡

通过发送restful请求进行获取
客户端的请求方式 jerseyClient
请求url apps/{names}

2.2.3、下架服务 / 向服务发送请求

服务关闭执行

IOC 容器关闭的时间主动发送下架请求
同时更新下架请求到别的server 节点

2.2.4、心跳续约 /向服务发送请求

定时任务

开启定时任务 不断请求续约接口
initScheduledTasks()

3、问题解答

3.1、client 和 server 进行通讯的时间是通过什么方式进行的 :::success http 嘛 还是 tcp socket ?
是依赖的springmvc 嘛 ?
是netty 嘛 还是别的 ?

都不是:采用的是 自己的restful通讯框架 jersey ,类似Spring MVC Controller ::: 3.2、eureka 的集群模式在代码中是如何实现的 :::info PeerAwareInstanceRegister类
PeerEurekaNodes类
中查找答案 ::: 3.3、eureka server接收请求的接口名字是什么 :::success /eureka/test/??????
eureka/get/byservername/???????? ::: 3.4、eureka client 是何时发送请求注册服务的

SpringBoot 依赖Eureka Client,在容器启动后,通过http 请求将自己的 信息(服务名字,端口号,IP地址) 注册到Eureka Server 上面

3.5、eureka server 和client 进行通讯的时间 server 可以主动向 client 发送请求嘛

应该不行,都是 client 端向 server 端发送消息

3.6、关于eureka的 两个注解 @EnableEureka…. 都做了啥?

将框架框架的核心配置信息 和 Bean 对象都注册到容器中

3.7、调用获取服务列表信息的地方是在哪个地方调用的 :::info 服务列表是在 负载均衡的时间进行调用的,Ribbon中使用。
Feign 代理 RestTemplate ,Ribbon 封装了 RestTemplate,使用Eureka Client 进行查询服务列表,来达到负载均衡的目的。 ::: 3.8、eureka保存 服务信息的结构是啥 :::tips 应该是Map> :::