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

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

 

三、nacos整合ribbon实现

 

首先抛出个问题,为什么nacos需要整合ribbon?

 

ribbon是负载均衡的组件,负载均衡,那是不是得有服务列表,不然怎么实现负载均衡?是的,基于这个原因,就可以解释nacos为什么需要适配ribbon,因为通过nacos提供的api,就可以从nacos服务端拉取服务注册表,这样服务数据的来源就有了。那么nacos是如何整合ribbon的呢?

 

ribbon提供了一个接口ServerList,ribbon会通过这个接口获取服务数据,nacos就是通过实现这个接口来实现整合nacos的。

 

ServerList 源码

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

就是提供了两个获取服务实例的方法。

 

接下来我们来看一看ServerList的实现NacosServerList源码。

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

可以看出,实现其实很简单,就是通过nacos提供的api NamingService来实现获取服务实例,然后转换成ribbon认识的NacosServer。

如果不清楚NamingService api的作用,请看一下 聊一聊nacos是如何进行服务注册的 这篇文章。

 

NacosServerList对象构造源码

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

个人的思考

 

其实ribbon在整合springcloud的实现在获取服务数据的整合方式我其实是持保留意见的。因为ribbon并没有实现通过springcloud提供的api来获取服务列表,而是需要第三方注册中心来主动适配ribbon,这就使得springcloud失去了约束的意义。就类似mybatis一样,mybatis依靠jdbc,但是mybatis根本不关心哪个数据库实现的jdbc。其实ribbon完全可以通过springcloud的api(DiscoveryClient)来实现从获取列表,这样注册中心主要去适配这个接口,而不需要直接适配ribbon。

 

DiscoveryClient其实就是springcloud提供的一个接口,用来获取服务实例的,需要各自注册中心实现,nacos的实现是NacosDiscoveryClient,实现也跟上面整合ribbon的差不多,这里我就不去翻源码了。

 

如果你有兴趣,可以仿照nacos实现,自己实现ribbon通过DiscoveryClient来获取服务实例。这里我就不贴出实现的源码,如果你有需要,可关注公众号,回复 ribbon,即可获取到实现源码和使用方法。

 

总结

 

本文首先讲了springcloud的关于服务自动注册的三大组件,通过这些组件就实现了当web应用启动的时候自动往服务注册中心进行注册,接下来我们剖析了nacos对应三大组件实现的源码,然后讲解了nacos适配ribbon的源码,同时个人也提出了ribbon实现springcloud的获取服务列表的看法。最后谢谢大家。

 

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

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