nacos

nacos源码分析——如何实现注册发现

2018-08-30  本文已影响180人  黄云斌huangyunbin

注册一个服务

image.png image.png
如果这个服务之前没有,第一次注册,构建这个服务信息
image.png
如果服务有了,就增加这个服务的实例ip
image.png
这个步骤就是和增加实例ip的接口是一样的逻辑了

增加实例ip的接口

image.png image.png image.png
这个真的是有点绕啊,终于来到真正处理的onAddIP4Dom了
这里的重点就newIPs了,就是更新后的ip列表
image.png image.png
ipAddressMap.values() 其实就是旧的ip加上newIPs
image.png

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

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

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


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

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


image.png

获取一个服务的所有ip

image.png
    srvedIPs = domObj.srvIPs(clientIP, Arrays.asList(StringUtils.split(clusters, ",")));
如果没传clusters参数,就找到所有的cluster
image.png
从每个cluster拿出ip列表,组合就得到所有的ip列表了
image.png

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

VirtualClusterDomain 在构造方法中注册了一个RaftListener
image.png image.png
public static final String IPADDRESS_DATA_ID_PRE = "com.alibaba.nacos.naming.iplist.";
关注的这个key就是ip列表的key了。
raft存的ip列表变化的时候,就会触发:
image.png
上一篇下一篇

猜你喜欢

热点阅读