一、主要涵蓋內(nèi)容
1.服務(wù)端控制臺源碼環(huán)境搭建
2.服務(wù)端保存客戶端注冊信息
3.客戶端的心跳檢測機(jī)制
4.客戶端服務(wù)發(fā)現(xiàn)
5.ribbon負(fù)載均衡
二、服務(wù)端控制臺源碼環(huán)境搭建
nacos服務(wù)端源碼地址:https://github.com/alibaba/nacos
git clone下載后我這邊與之前搭建環(huán)境版本保持一致,切換到1.1.4版本:
啟動(dòng)console項(xiàng)目:
啟動(dòng)后直接報(bào)錯(cuò)阔涉,是因?yàn)閚acos默認(rèn)走cluster集群配置,而我們本地還沒配置集群環(huán)境
跟蹤報(bào)錯(cuò)代碼StartingSpringApplicationRunListener.logClusterConf():
那么只要STANDALONE_MODE為true,就可以走單機(jī)模式了哈打。
也就是讀取STANDALONE_MODE_PROPERTY_NAME的環(huán)境變量,那么我們再啟動(dòng)的時(shí)候修改環(huán)境變量就行了:
debug方式啟動(dòng)項(xiàng)目:
啟動(dòng)成功后訪問控制臺http://localhost:8848/nacos/#/login讯壶,初始賬號密碼:nacos/nacos
那么到此就恭喜你料仗,你這邊搭建好了源碼服務(wù)端環(huán)境。
三伏蚊、客戶端注冊服務(wù)接口
debug啟動(dòng)demo-a微服務(wù)立轧,客戶端自動(dòng)注冊調(diào)用NacosServiceRegistry.register方法,并打斷點(diǎn)進(jìn)行跟蹤:
接口地址為/nacos/v1/ns/instance,params將注冊需要的namespace躏吊、group氛改、clsuter信息都傳遞過去
此時(shí)服務(wù)端項(xiàng)目naming進(jìn)行斷點(diǎn)調(diào)試:
客戶端微服務(wù)基本注冊信息被接受進(jìn)來:
創(chuàng)建service并初始化service
同時(shí)service再init時(shí)候會(huì)開啟定時(shí)任務(wù)進(jìn)行心跳檢測
最后將service中包含了namespace、group等信息比伏,將service包裹成一個(gè)key,然后將instances列表放入consistencyService中:
四胜卤、客戶端心跳機(jī)制
客戶端微服務(wù)demo-a以debug方式啟動(dòng),定位到NacosNamingService.registerInstance
進(jìn)來服務(wù)端naming項(xiàng)目進(jìn)行斷點(diǎn)跟蹤:
該過程可以可以再次將客戶端注冊信息進(jìn)行重新注冊赁项,以防之前心跳失敗后被剔除列表
五葛躏、客戶端服務(wù)發(fā)現(xiàn)
這塊就不具體展開來詳細(xì)講解了澈段,以下為截圖跟進(jìn)具體的查詢邏輯:
前面我們跟蹤過了nacos-naming項(xiàng)目,
六舰攒、Ribbon負(fù)載均衡
Ribbon的使用只需要在RestTemplate上面加入注解@LoadBalanced既可實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)
ribbin的負(fù)載均衡器默認(rèn)為ZoneAvoidanceRule,同時(shí)也可以在配置文件中進(jìn)行指定其它負(fù)載均衡策略
樣例:
以下是摘抄自網(wǎng)上的負(fù)載均衡策略整理:
接下來咋們跟蹤一下ribbon具體的處理邏輯败富,先找到自動(dòng)裝配類LoadBalancerAutoConfiguration:
進(jìn)入裝配類中查看:
同時(shí)后面配置了RestTemplateCustomizer定制化類:
最關(guān)鍵的就是LoadBalancerInterceptor攔截器了,接下來跟蹤一下調(diào)用
調(diào)用代碼:
瀏覽器訪問(demo-a微服務(wù)測試地址調(diào)用demo-b服務(wù)):http://localhost:8001/sayHello/123
原始訪問地址為http://demo-b/xxx:
跟蹤進(jìn)入ribbon的負(fù)載均衡邏輯摩窃,從服務(wù)列表中根據(jù)算法選擇一個(gè)server
RibbonLoadBalancerClient將uri地址進(jìn)行替換
好了兽叮,如果您看到這相信對整個(gè)nacos的服務(wù)端、客戶端猾愿、客戶端負(fù)載均衡應(yīng)該有了大致的了解了充择。整個(gè)nacos這塊先告一段落,后續(xù)文章中會(huì)繼續(xù)分享分布式事物處理方案匪蟀。