集群模式下集群是如何互相感知的
前言
前面我们介绍了Nacos为什么把配置文件Dump到磁盘中,那么集群模式下:
- 服务器之间是如何彼此感知发现的呢?
- 当某一台机器宕机之后怎么处理呢?
- 如何获取本地ip
- 获取服务器列表
- 服务器列表健康检查
集群模式
首先我们来看源码:nacos/distribution
ServerMemberManager 服务列表
在看源码之前我们先说明一下Nacos 读取服务器列表的两种方式
方式一:本地读取cluster.conf
每台服务器本地维护一份集群配置文件 cluster.conf
072001.png
方式二:读取统一配置中心的配置信息
072002.png
ApplicationListener 监听器
ServerListService 实现了SpringBoot的扩展类ApplicationListener;并且事件源是WebServerInitializedEvent: 是WebServer初始化的事件;通过WebServerInitializedEvent可以拿到WeServer的实例;通过WeServer.getPort()拿到启动的端口;
下面 让我们来 加入一篇 **WebServerInitializedEvent ** 的研究吧~~~
首先来写一个简化版的 ServiceManager ,nacos 也是这么实现的,其实大多数需要上报自己服务Ip Port 到公共配置中心的都需要这个功能。
先来看我们的简单类:
@Component(value = "serviceManager")
public class ServiceManager implements ApplicationListener<WebServerInitializedEvent> {
@Override
public void onApplicationEvent(WebServerInitializedEvent event) {
final int port = event.getWebServer().getPort();
}
}
这个简单的代码就实现了获取服务器自己端口然后可以完成上报的功能。