1.14微服务--Eureka组件源码解析

Eureka组件源码解析

一、Eureka 的基本概念

1)Register一一 服务注册
当Eureka Client 向Eureka Server 注册时, Eureka Client 提供自身的元数据,比如IP 地址、端口、运行状况指标的Url 、主页地址等信息。

2)Renew一一 服务续约

Eureka Client 在默认的情况下会每隔30秒发送一次心跳来进行服务续约。通过服务续约来告知Eureka Server 该Eureka Client 仍然可用,没有出现故障。正常情况下,如果Eureka Server在90 秒内没有收到Eureka Client 的心跳, Eureka Server 会将Eureka Client 实例从注册列表中删除。注意:官网建议不要更改服务续约的间隔时间。

3)Fetch Registries一一 获取服务注册列表信息

Eureka Client 从 Eureka Server 获取服务注册表信息,井将其缓存在本地。Eureka Client 会使用服务注册列表信息查找其他服务的信息,从而进行远程调用。该注册列表信息定时(每30 秒) 更新一次,每次返回注册列表信息可能与Eureka Client 的缓存信息不同, Eureka Client会自己处理这些信息。

如果由于某种原因导致注册列表信息不能及时匹配, Eureka Client 会重新获取整个注册表信息。Eureka Server 缓存了所有的服务注册列表信息,并将整个注册列表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。

Eureka Client 和Eureka Server 可以使用JSON 和XML 数据格式进行通信。在默认的情况下, Eureka Client 使用JSON 格式的方式来获取服务注册列表的信息。

4) Cancel 一一 服务下线

Eureka Client 在程序关闭时可以向 Eureka Server 发送下线请求。发送请求后,该客户端的实例信息将从Eureka Server 的服务注册列表中删除;该下线请求不会自动完成,需要在程序关闭时调用以下代码:

DiscoveryManager.getinstance().shutdownComponent();

5) Eviction一一服务剔除
在默认情况下,当Eureka Client 连续90 秒没有向Eureka Server 发送服务续约(即心跳) 时, Eureka Server 会将该服务实例从服务注册列表删除,即服务剔除。

二、Eureka 的高可用架构

下图为Eureka 的高可用架构图:

由图可知在这个架构中有两个角色,即Eureka Server 和Eureka Client 。

而Eureka Client 又分为Applicaton Service 和Application Client , 即服务提供者和服务消费者。每个区域有一个Eureka 集群, 并且每个区域至少有一个Eureka Server 可以处理区域故障, 以防服务器瘫痪

Eureka Client 向Eureka Server 注册, 将自己的客户端信息提交给Eureka Server 。然后,Eureka Client 通过向Eureka Server 发送心跳(每30 秒一次)来续约服务。如果某个客户端不能持续续约,那么Eureka Server 断定该客户端不可用, 该不可用的客户端将在大约90 秒后从Eureka Serve 服务注册列表中删除。

服务注册列表信息和服务续约信息会被复制到集群中的每个Eureka Serve 节点;来自任何区域的Eureka Client 都可以获取整个系统的服务注册列表信息;根据这些注册列表信息, Application Client 可以远程调用Applicaton Service 来消费服务。

三、Register 服务注册

服务注册,即Eureka Client 向 Eureka Server 提交自己的服务信息, 包括IP地址、端口、Serviceld 等信息;如果Eureka Client 在配置文件中没有配置Serviceld,则默认为配置文件中配置的服务名,即$ {spring . application.name }的值。

当Eureka Client 启动时, 会将自身的服务信息发送到Eureka Server 。这个过程其实非常简单, 现在来从源码的角度分析服务注册的过程:

在工程的 Maven 的依赖包下,找到 eureka-client-1.6.2.jar 包;

在com.netflix.discovery 包下有一个DiscoveryClient 类,该类包含了Eureka Client 向Eureka Server 注册的相关方法;其中 DiscoveryClient 实现了EurekaClient 接口, 并且它是一个单例模式,而EurekaClient 继承了LookupService 接口。它们之间的关系如下图所示:【DiscoveryClient、EurekaClient 和LookupService 的关系】

在 DiscoveryClient 类中有一个服务注册的方法 register(), 该方法通过Http 请求向Eureka Server 注册, 其代码如下:

    boolean register() throws Throwable {
        logger.info(PREFIX + appPathidentifier + ": registering service ... " );
        EurekaHttpResponse<Void> httpResponse ;
        try {
        httpResponse = eurekaTransport.registrationClient.register(instanceinfo);
        } catch (Exception e) {
            logger.warn ( " {} - registration failed {} ", PREFIX + appPathidentifier, e . getMessage(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值