nacos源碼分析——如何實現(xiàn)注冊發(fā)現(xiàn)

注冊一個服務

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
其實是最開始請求參數(shù)中的ipList來的。

我們也可以回想起注冊服務的時候就出現(xiàn)過的


image.png

獲取一個服務的所有ip

image.png
    srvedIPs = domObj.srvIPs(clientIP, Arrays.asList(StringUtils.split(clusters, ",")));
如果沒傳clusters參數(shù),就找到所有的cluster
image.png
從每個cluster拿出ip列表,組合就得到所有的ip列表了
image.png

那么問題來了,我們注冊ip的時候,我們只是改了raft的對應的key的值,cluster的數(shù)據(jù)怎么保持一致的呢?

VirtualClusterDomain 在構造方法中注冊了一個RaftListener
image.png
image.png
public static final String IPADDRESS_DATA_ID_PRE = "com.alibaba.nacos.naming.iplist.";
關注的這個key就是ip列表的key了。
raft存的ip列表變化的時候,就會觸發(fā):
image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容