注册一个服务
如果这个服务之前没有,第一次注册,构建这个服务信息
如果服务有了,就增加这个服务的实例ip
这个步骤就是和增加实例ip的接口是一样的逻辑了
增加实例ip的接口
这个真的是有点绕啊,终于来到真正处理的onAddIP4Dom了
这里的重点就newIPs了,就是更新后的ip列表
ipAddressMap.values() 其实就是旧的ip加上newIPs
public static final String IPADDRESS_DATA_ID_PRE = "com.alibaba.nacos.naming.iplist.";
这个就是存ip列表的key了,后面就是我之前说过的raft的东西了。
我们再回头看看newIPs是怎么来的
其实是最开始请求参数中的ipList来的。
我们也可以回想起注册服务的时候就出现过的
获取一个服务的所有ip
srvedIPs = domObj.srvIPs(clientIP, Arrays.asList(StringUtils.split(clusters, ",")));
如果没传clusters参数,就找到所有的cluster
从每个cluster拿出ip列表,组合就得到所有的ip列表了
那么问题来了,我们注册ip的时候,我们只是改了raft的对应的key的值,cluster的数据怎么保持一致的呢?
VirtualClusterDomain 在构造方法中注册了一个RaftListener
public static final String IPADDRESS_DATA_ID_PRE = "com.alibaba.nacos.naming.iplist.";