服务注册中心完结篇(四)

一、主要涵盖内容

1.服务端控制台源码环境搭建

2.服务端保存客户端注册信息

3.客户端的心跳检测机制

4.客户端服务发现

5.ribbon负载均衡

二、服务端控制台源码环境搭建

nacos服务端源码地址:https://github.com/alibaba/nacos

git clone下载后我这边与之前搭建环境版本保持一致,切换到1.1.4版本:

启动console项目:

启动后直接报错,是因为nacos默认走cluster集群配置,而我们本地还没配置集群环境

跟踪报错代码StartingSpringApplicationRunListener.logClusterConf():

那么只要STANDALONE_MODE为true,就可以走单机模式了。

也就是读取STANDALONE_MODE_PROPERTY_NAME的环境变量,那么我们再启动的时候修改环境变量就行了:

debug方式启动项目:

启动成功后访问控制台http://localhost:8848/nacos/#/login,初始账号密码:nacos/nacos

那么到此就恭喜你,你这边搭建好了源码服务端环境。

三、客户端注册服务接口

debug启动demo-a微服务,客户端自动注册调用NacosServiceRegistry.register方法,并打断点进行跟踪:

接口地址为/nacos/v1/ns/instance,params将注册需要的namespace、group、clsuter信息都传递过去

此时服务端项目naming进行断点调试:

客户端微服务基本注册信息被接受进来:

创建service并初始化service

同时service再init时候会开启定时任务进行心跳检测

最后将service中包含了namespace、group等信息,将service包裹成一个key,然后将instances列表放入consistencyService中:

四、客户端心跳机制

客户端微服务demo-a以debug方式启动,定位到NacosNamingService.registerInstance

进来服务端naming项目进行断点跟踪:

该过程可以可以再次将客户端注册信息进行重新注册,以防之前心跳失败后被剔除列表

五、客户端服务发现

这块就不具体展开来详细讲解了,以下为截图跟进具体的查询逻辑:

前面我们跟踪过了nacos-naming项目,

六、Ribbon负载均衡

Ribbon的使用只需要在RestTemplate上面加入注解@LoadBalanced既可实现服务发现

ribbin的负载均衡器默认为ZoneAvoidanceRule,同时也可以在配置文件中进行指定其它负载均衡策略

样例:

以下是摘抄自网上的负载均衡策略整理:

接下来咋们跟踪一下ribbon具体的处理逻辑,先找到自动装配类LoadBalancerAutoConfiguration:

进入装配类中查看:

同时后面配置了RestTemplateCustomizer定制化类:

最关键的就是LoadBalancerInterceptor拦截器了,接下来跟踪一下调用

调用代码:

浏览器访问(demo-a微服务测试地址调用demo-b服务):http://localhost:8001/sayHello/123

原始访问地址为http://demo-b/xxx:

跟踪进入ribbon的负载均衡逻辑,从服务列表中根据算法选择一个server

RibbonLoadBalancerClient将uri地址进行替换

好了,如果您看到这相信对整个nacos的服务端、客户端、客户端负载均衡应该有了大致的了解了。整个nacos这块先告一段落,后续文章中会继续分享分布式事物处理方案。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。