注册一个服务

nacos python客户端 nacos python注册_List

nacos python客户端 nacos python注册_请求参数_02

如果这个服务之前没有,第一次注册,构建这个服务信息

nacos python客户端 nacos python注册_请求参数_03

如果服务有了,就增加这个服务的实例ip

nacos python客户端 nacos python注册_nacos python客户端_04

这个步骤就是和增加实例ip的接口是一样的逻辑了


增加实例ip的接口

nacos python客户端 nacos python注册_构造方法_05

nacos python客户端 nacos python注册_nacos python客户端_06

nacos python客户端 nacos python注册_nacos python客户端_07

这个真的是有点绕啊,终于来到真正处理的onAddIP4Dom了

这里的重点就newIPs了,就是更新后的ip列表

nacos python客户端 nacos python注册_构造方法_08

nacos python客户端 nacos python注册_请求参数_09

ipAddressMap.values() 其实就是旧的ip加上newIPs

nacos python客户端 nacos python注册_List_10

public static final String IPADDRESS_DATA_ID_PRE = “com.alibaba.nacos.naming.iplist.”;

这个就是存ip列表的key了,后面就是我之前说过的raft的东西了。

我们再回头看看newIPs是怎么来的

nacos python客户端 nacos python注册_构造方法_11

其实是最开始请求参数中的ipList来的。

我们也可以回想起注册服务的时候就出现过的

nacos python客户端 nacos python注册_请求参数_12


获取一个服务的所有ip

nacos python客户端 nacos python注册_List_13

srvedIPs = domObj.srvIPs(clientIP, Arrays.asList(StringUtils.split(clusters, ",")));

如果没传clusters参数,就找到所有的cluster

nacos python客户端 nacos python注册_List_14

从每个cluster拿出ip列表,组合就得到所有的ip列表了

nacos python客户端 nacos python注册_请求参数_15

那么问题来了,我们注册ip的时候,我们只是改了raft的对应的key的值,cluster的数据怎么保持一致的呢?

VirtualClusterDomain 在构造方法中注册了一个RaftListener

nacos python客户端 nacos python注册_List_16

nacos python客户端 nacos python注册_请求参数_17

public static final String IPADDRESS_DATA_ID_PRE = "com.alibaba.nacos.naming.iplist.";

关注的这个key就是ip列表的key了。

raft存的ip列表变化的时候,就会触发:

nacos python客户端 nacos python注册_构造方法_18