1. 程式人生 > 其它 >各註冊中心consul eureka 以及nacos的服務發現原理

各註冊中心consul eureka 以及nacos的服務發現原理

springcloud的註冊中心都會跟ribbon進行整合進行負載均衡,既然要進行負載均衡,那麼就需要進行服務列表的發現,而ribbon為了讓每個註冊中心進行整合,提供了一個抽象類:AbstractServerList

可以參考我的ribbon原始碼分析:Ribbon原始碼分析(二)-- 服務列表的獲取和負載均衡演算法分析 - yangxiaohui227 - 部落格園 (cnblogs.com)

ribbon原始碼中,通過servers = serverListImpl.getUpdatedListOfServers(); 方法獲取服務列表,而serverListImpl就是ServerList<T>的實現類

下面debug舉例說明consul註冊中心是如何實現該方法的:

如果我們自己定義一個註冊中心應該怎麼做呢,其實只要繼承AbstractServerList這個類,然後往容器中注入即可

看效果,呼叫到第三方服務時,就會通過該實現類查詢服務列表,由於我的是空實現,所以會列印上面的日誌

其他註冊中心服務發現同理,另外,服務列表的更新如何實現呢?在riibbon原始碼有說,感興趣的可以看,本質是弄個定時排程任務,然後不斷呼叫上面的實現類