一文带你看懂nacos是如何整合springcloud -- 注册中心篇(二)

pivoteic
发布于 2022-6-14 16:30
浏览
0收藏

 

三个组件是如何协同工作的?

 

我这里先说结论,当容器启动的时候,AbstractAutoServiceRegistration监听到事件,然后调用ServiceRegistry#register方法将Registration(服务实例数据)注册到注册中心。

 

下面贴出源码

 

由于监听了事件,所以直接看onApplicationEvent方法的实现就行了

一文带你看懂nacos是如何整合springcloud -- 注册中心篇(二)-鸿蒙开发者社区

接下来进入start方法

一文带你看懂nacos是如何整合springcloud -- 注册中心篇(二)-鸿蒙开发者社区
核心就是这个register方法,这个方法就是往服务注册中心进行注册。


这里有两个细节,在注册前后发布了事件,这是个扩展的方式,就是允许你自己在服务注册前后进行自定义的操作。

 

接下来进入register方法

一文带你看懂nacos是如何整合springcloud -- 注册中心篇(二)-鸿蒙开发者社区

就是直接调用ServiceRegistry#register方法进行注册。而这些都需要具体的注册中心进行实现。

 

二、nacos整合springcloud的实现

 

上面我们说了springcloud提供的关于服务注册的标准,接下来我们就来看看nacos是如何实现的?

 

在看实现源码之前,我们不防进行猜想,我们来猜一猜nacos怎么实现。其实看源码猜想是个很重要的环节,带着自己的猜想去看验证源码,这样就能够加深印象。

 

通过上面说的三个组件的工作关系,我们来猜测一下。这三个接口最重要的是服务注册,那么核心是不是ServiceRegistry#register方法实现?Registration只是一个数据的封装,说白了就是跟new出来的User是一样的。那么ServiceRegistry该怎么实现呢?在 聊一聊nacos是如何进行服务注册的 一文中我剖析了,nacos是通过NamingService实现向服务端注册数据的,那么ServiceRegistry的register方法,是不是直接调用NamingService方法实现注册就可以了。接下来我们就来验证一下。

 

1)ServiceRegistry实现--NacosServiceRegistry

 

接下来看一看register方法实现。

一文带你看懂nacos是如何整合springcloud -- 注册中心篇(二)-鸿蒙开发者社区

果然,跟我们猜想的一样,其实就是通过nacos提供的api NamingService将服务实例进行数据进行注册,只不过只是将springcloud的Registration转换成nacos认识的Instance而已。

 

文章转自公众号:三友的java日记

标签
已于2022-6-14 16:30:30修改
收藏
回复
举报
回复
    相关推荐