Netflix源码解析之Eureka:Eureka client 注册过程

记录下eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上。不像上文中讲到的get操作,服务需要自己发起读取注册信息来进行自己后续的服务调用。服务注册可以认为是Eureka client自己完成,不需要服务来费心。

实现思路其实也挺简单,在com.netflix.discovery.DiscoveryClient启动的时候,会初始化一个定时任务,定时的把本地的服务配置信息,即需要注册到远端的服务信息自动刷新到注册服务器上。

客户端
1. 在DiscoveryClient中初始化一个InstanceInfoReplicator,其实里面封装了以定时任务。

2. 以initialDelayMs为间隔调用

3. ScheduledExecutorService的task的具体业务定义在com.netflix.discovery.InstanceInfoReplicator.run()中,可以看到调用了了client的register方法。

4. 执行注册的业务就是定义在DiscoveryClient的register方法,可以看到这个方法不是public的,也就是设计上也不是给外面调用的。这里的调用和上文中一般的调用没有差别,都是对eurekaserver进行了一个rest 调用。

2 服务端
1. 看服务端怎样接受请求,来在服务端进行注册的。可以看到服务端的也是开放一个rest接口。

2. ?执行注册的动作在com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl.register(InstanceInfo info, boolean isReplication)中

3. 在其父类中实现一般的注册信息存储的操作,其实就是存储在一个?ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry的结构中。

在服务端存储的数据结构设计上还是有挺多细节的,数据老化,不同peernode上的数据复制和同步等,这些都是后面有功夫关注的。

 

 

 

 

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: Netflix源码解析之Eureka:Eureka client 注册过程


, , ,

Trackbacks/Pingbacks

  1. Spring-cloud & Netflix 源码解析之Eureka | idouba - 2016年4月17日

    […] Spring-cloud & Netflix 源码解析:Eureka client 注册过程 […]

  2. Spring-cloud & Netflix 源码解析:Eureka client 到Server的调用过程 | idouba - 2016年4月14日

    […] By idouba on 2016年3月10日 in microservice 在前面一篇文章中介绍了spring cloud会自动的在服务端维护一个自己的org.springframework.cloud.netflix.eureka.EurekaDiscoveryClient,其实是对netflix原生的?com.netflix.discovery.EurekaClient的一个封装。在这里向了解下这个client是怎样工作的,怎样去和eureka server通信的。在这篇文章中重点就是粗线条的知道下eureka client 到server的整个通信(交互)的过程(通道或者方式)。不是对每个接口的详细追踪。管用非常重要的register操作见Spring-cloud & Netflix 源码解析:Eureka client 注册过程。 从client提供的API已经知道了,虽然有spring cloud的封装,但是真正实现还是netflix原生的client,即com.netflix.discovery.EurekaClient。观察com.netflix.discovery.DiscoveryClient 源码看到维护有一个本地对象: Java […]

发表评论