我是靠谱客的博主 文艺红酒,最近开发中收集的这篇文章主要介绍Nacos和Eureka心跳机制对比心跳机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Nacos和Eureka心跳机制对比(一)

  • 心跳机制
    • Nacos的实现
      • 客户端
      • 服务端

心跳机制

在微服务框架中,我们利用注册中心统一对各个服务进行管理,这时,就需要知道各个服务的健康状态,也就是各个服务定时发送一个自定义的结构体(心跳包)到注册中心,让对方知道自己还活着,以确保连接的有效性的机制。

Nacos的实现

我们以springboot为例,引入nacos:

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.1</version>
        </dependency>

查看jar结构如下:
在这里插入图片描述

客户端

  1. 我们从spring.factories开始,首先看他装配了哪些类:
    在这里插入图片描述
    我们进去这个跟registry相关的类:
    在这里插入图片描述
    可以看到这里注入了三个bean实例:
  • nacosServiceRegistry:表示向服务端注册的动作,主要实现了具体注册的方法;
  • nacosRegistration:该类封装了具体的注册信息;
  • nacosAutoServiceRegistration:实现了org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration ,代表了nacos注册中心的标准实现,类似的还有zookeeper,也是这种方式。

AbstractAutoServiceRegistration实现了ApplicationListener,而事件event和Listener是共同存在的,通过观察者模式 来完成spring的事件机制。而AbstractAutoServiceRegistration是spring-cloud-common中的一个类,也是一个WebServerInitializedEvent监听器,会在webserver启动后回调。

  1. 我们进入事件的回调方法:onApplicationEvent() -> bind() -> start() -> registerManagement()
    来看看nacos的实现:这里会调用NacosServiceRegistry.classregister()方法
    在这里插入图片描述
    在这里插入图片描述

  2. register()方法中调用了namingService.registerInstance()的注册逻辑:
    在这里插入图片描述

  3. registerInstance()中会做两件事:
    组装心跳包beatInfo
    发送心跳beatReactor.addBeatInfo()

其中beatReactor是在NacosNamingService构造函数中初始化的,是一个延迟队列的线程池。

在这里插入图片描述
addBeatInfo中:
在这里插入图片描述
其中beatTask是个Runnable实现类:
在这里插入图片描述
5. 在sendBeat中通过http发送心跳请求。
在这里插入图片描述

服务端

  1. 客户端在发送http请求后,根据请求路径,在服务端找到相应controller:com.alibaba.nacos.naming.controllers.InstanceController#beat
    handleBeat方法中处理心跳请求:
    在这里插入图片描述
  2. handleBeat方法中主要做了三件事:
    首先,查询心跳包中服务,获取服务实例
    其次,判断服务实例存不存在,如果不存在,重新注册
    最后,processClientBeat()方法异步更新该服务的信息(刷新最近一次心跳时间)
    在这里插入图片描述
  3. processClientBeat()方法和ClientBeatProcessor结构如下:
    在这里插入图片描述
    在这里插入图片描述

最后

以上就是文艺红酒为你收集整理的Nacos和Eureka心跳机制对比心跳机制的全部内容,希望文章能够帮你解决Nacos和Eureka心跳机制对比心跳机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(189)

评论列表共有 0 条评论

立即
投稿
返回
顶部