Eureka Server 和 Eureka Client 之间是通过一组 API 进行通信的,包括服务注册(registry),续约(renew),退出(cancel)和剔除(evict)。
注册
Eureka Client 启动之后首先会向 Eureka Server 进行注册,注册流程如下:

Client 通过
POST /eureka/v2/apps/{appID}向 Server 发起注册请求;


Server 收到请求后,用双层 HashMap 保存注册信息;


更新自我保护机制阈值
expectedNumberOfRenewsPerMin和numberOfRenewsPerMinThreshold;
expectedNumberOfRenewsPerMin,期望最大每分钟续租次数。numberOfRenewsPerMinThreshold,期望最小每分钟续租次数。
将服务名字放到
recentRegisteredQueue中;
更新实例的状态;

将实例信息放到
recentlyChangedQueue中;
通过
invalidate()清除 guava 缓存;
向相邻节点复制信息。
续约
Eureka Client 注册到 Eureka Server 后,需要定期(每30s)发送心跳来维持通信。如果超时未收到心跳,服务器会认为服务不可用,从而将 Eureka Client 的注册信息从服务器删除。Renew 的流程如下:

- Eureka Client 通过定时任务向服务器发起 renew 请求


- Eureka Server 收到请求后会更新该 Client 的更新时间

更新最小分钟数 renewsLastMin 和 最后更新时间
- Eureka Server 向相邻节点同步信息

剔除
在 Eureka Server 上未正常推出和超时未收到心跳的 Client 注册信息会被剔除。 Evict 的流程如下:

- 初始化环境和上下文

- 从相邻节点同步注册信息

- 更新自我保护阈值

- 创建 evictionTask


- 判断是否过期



- 计算剔除的数量并随机删除

- 更新缓存
退出
退出是 Eureka Client 主动向服务通知服务关闭的操作,流程如下:

- Eureka Client 向服务器发送 cancel 请求

- Eureka Server 收到请求后,将实例从服务列表中删除

将实例信息放到 recentlyChangedQueue 中,清空 guava 缓存
- 向相邻节点同步信息,更新阈值
