Nacos和Eureka心跳机制对比

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

心跳机制

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

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结构如下:
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唔知取咩名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值