nacos 下线接口_Spring Cloud(七):注册中心nacos客户端视角

本文主要介绍了在Spring Cloud中使用Nacos作为注册中心时,从客户端角度理解服务的上线与下线过程,包括服务更新、心跳检查以及服务的注册与注销操作。
摘要由CSDN通过智能技术生成

点击蓝字关注我们

260818d3c7b2f69e0c1f9a3a694f18c3.gif 260818d3c7b2f69e0c1f9a3a694f18c3.gif 大家好,我是杰哥 上周,我们通过文章Spring Cloud(六):注册中心nacos-服务端视角 篇 ,站在nacos的服务端的视角,对nacos作为注册中心的服务端节点之间的选举、心跳、服务注册以及同步等主要动作进行了梳理说明 那么,如果想要对与nacos作为注册中心有一个全面的了解呢,今天就继续跟着杰哥一起,转向客户端的角度,来探究一波吧~ 关于如何实现Nacos客户端,以及客户端的consumer如何如调用provider的服务,可以参考文章 Spring Cloud(五):注册中心-nacos篇 ,进行实现 等你实现以后,再进入下面的源码探究环节,可能会更快速进入节奏哦~ 首先,我们从初始化步骤开始,进入源码环节

一 准备 

初始工作

nacos作为注册中心,它的初始化是由NacosNamingService.init()方法进行的 我们一起看看,init()方法里都做了什么 c77bda31bfe72c603312492c747021b4.png 1)初始化命名空间namespace: initNamespaceForNaming() 在Nacos中,命名空间用于租户粗粒度隔离,同时还可以进行环境的区别,如开发环境和测试环境等等 2)初始化服务器地址:initServerAddr() 3)初始化web上下文:initWebRootContext() 它支持通过阿里云EDAS进行部署 4)初始化缓存目录:initCacheDir() 5)初始化日志文件名称:调用initLogName()方法,从配置中获取日志文件 接下来,就是我们要看的重点了 1)初始化事件分发监听器EventDispatcher 当客户端订阅了某个服务信息后,会以Listener的方式注册到EventDispatcher的队列中,当有服务变化的时候,便会通知订阅者 2)初始化服务端代理NamingProxy 用于客户端与服务端的通信 3)初始化心跳通信类BeatReactor 用于维持与服务器之间的心跳通信,上报客户端注册到服务端的服务信息 4)初始化服务信息更新器HostReactor 用于客户端服务的订阅,以及从服务端更新服务信息。对了,也就是说客户端会使用HostReactor进行订阅操作,订阅了之后,上面说到的事件分发监听器EventDispatcher会将服务信息通知给订阅者咯~

二 重点 

步骤源码

01.服务更新

EventDispatcher是一个事件分发器,它维护了一个有变更的服务的队列
changedServices
private BlockingQueuechangedServices
= new LinkedBlockingQueue();
以及一个对于某个服务的监听者列表ConcurrentMap:observerMap
private ConcurrentMap, List> observerMap= new ConcurrentHashMap, List>();
其中key为服务名称,value为监听这个服务变更的客户端实例列表 也就是说,EventDispatcher会实时地将服务变化信息,同步给监听该服务变化信息的客户端,使得该客户端可以进行后续动态操作 小结 1 EventDispatcher工作流程 4000d50c2e07d36415194625621525bf.png

02.心跳

首先,在初始化NacosNamingService.init()中,我们看到nacos已经对心跳类BeatReactor进行了初始化,那么在什么时候会开始进行第一次心跳呢? 答案是:实例第一次注册的时候。第一次开启并执行了心跳任务,会再开启下一次心跳的定时任务,一直继续下去,直到该实例下线 1)进入addBeatInfo()方法 679ab4be4fff5753c49a8eb8652c9cf1.png 实例注册的时候调用了addBeatInfo()方法,并且默认时间间隔为5s 2)进入BeatReactor.addBeatInfo()方法 a0079fb10b6fb6283f8dbb2d669c2392.png 该方法通过ScheduledExecutorService执行BeatTask任务 那么只需要看一下该方法的run()方法,就可以知道心跳任务的具体执行逻辑了 3)进入BeatTask.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值