Eureka Server与Eureka Client之间签订了一个契约(Lease.class),这是它们之间正常运转的根基。寒来暑往,年复一年,确保对微服务系统提供稳定的发现注册服务。
以心跳续约为例,Eureka Client每隔30秒发送一次心跳续约。Eureka Server收到客户端发来的请求后,会重新计算租期。
一,一纸契约
Eureka Server与Eureka Client之间签订了一个契约。这个契约就是Lease.class。
这个契约维护着各个约定的到期时间,Eureka Server开启定时任务,一旦到了履行契约条款的时候,就去执行一段逻辑,用实际行动捍卫契约。
这个契约还定义了三项具体的承诺:
register:服务注册。
cancel:服务下线。
renew:心跳续约。
二,法院-契约管理者
这个契约管理者就是LeaseManager.class。
LeaseManager.class定义了契约的行为方法,一共有4个方法。
register:处理Eureka Client发送过来的服务注册请求。
cancel:处理Eureka Client发送过来的服务下线请求。
renew:处理Eureka Client发送过来的心跳续约请求。
evict:Eureka Server主动发起的定时任务,定期清理无效节点。默认执行周期是60秒。
三,用行动兑现契约
有了契约,还要有具体行动。
LeaseManager.class的具体实现类是InstanceRegistry.class。这个类是Spring Cloud包下面的,其实就是对netflix的实现进行了一层包装,最终还是调用了netflix实现类PeerAwareInstanceRegistryImpl.class。
Eureka server端契约的核心处理类:
PeerAwareInstanceRegistryImpl.class
Eureka client端契约的核心处理类:
DiscoveryClient.class
DiscoveryClient.class主要功能如下:
1,注册服务到Eureka server。
2,下线服务,并从Eureka server服务列表删除服务该服务。
3,发送心跳续约到Eureka server。
4,从Eureka server拉取服务列表。
四,Eureka Server与Eureka Client的通信方式
Eureka Server与Eureka Client之间使用Jersey客户端来进行通信,具体的逻辑封装在EurekaTransport.class中,EurekaTransport.class是DiscoveryClient.class的内部类,里面封装了通信的具体参数。
什么是Jersey呢?引用维基百科的介绍 :Jersey RESTful Web Services框架是一个用Java开发RESTful Web服务的开源框架。
网友评论