微服務組件nacos配置中心實戰(zhàn)源碼分析_第1頁
微服務組件nacos配置中心實戰(zhàn)源碼分析_第2頁
微服務組件nacos配置中心實戰(zhàn)源碼分析_第3頁
微服務組件nacos配置中心實戰(zhàn)源碼分析_第4頁
微服務組件nacos配置中心實戰(zhàn)源碼分析_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1.Nacos官方文檔:/alibaba/spring-cloud-alibaba/wiki/Nacos-Nacos提供用于存儲配置和其他元數據的key/value存儲,為分布式系統(tǒng)中的外部化配置提供服務器端和客戶端支持。使用SpringCloudAlibabaNacosConfig,您可以在NacosServer集中管理你SpringCloud應用的外部屬性配置。1.11.2nacos-config通過NacosServer和spring-cloud-starter-alibaba-nacos-config1.Nacos官方文檔:/alibaba/spring-cloud-alibaba/wiki/Nacos-Nacos提供用于存儲配置和其他元數據的key/value存儲,為分布式系統(tǒng)中的外部化配置提供服務器端和客戶端支持。使用SpringCloudAlibabaNacosConfig,您可以在NacosServer集中管理你SpringCloud應用的外部屬性配置。1.11.2nacos-config通過NacosServer和spring-cloud-starter-alibaba-nacos-config1)引入依12342)添加45dataid為yaml3)啟動服務,NacosKeyNamespace默認是空串,公共命名空間(public),分組默認是spring-cloud-starter-alibaba-nacos-config在加載配置的時候,不僅僅加載了以dataid${}.${file-${}-${profile}.${file-extension:properties}3)啟動服務,NacosKeyNamespace默認是空串,公共命名空間(public),分組默認是spring-cloud-starter-alibaba-nacos-config在加載配置的時候,不僅僅加載了以dataid${}.${file-${}-${profile}.${file-extension:properties}的基礎配置。在日常開發(fā)中如果遇到多套環(huán)境下的同配置,可以通過SpringpublicclassNacosConfigApplication3publicstaticvoidmain(String[]args)throwsInterruptedExceptionConfigurableApplicationContextapplicationContext=SpringApplication.run(NacosConfigApplication.class,6while(true)當動態(tài)配置刷新時,會更新到StringuserName=StringuserAge=System.err.println("commonname:"+userName+";age:"+131517publicclassNacosConfigApplication3publicstaticvoidmain(String[]args)ConfigurableApplicationContextapplicationContext=SpringApplication.run(NacosConfigApplication.class,StringuserName=StringuserAge=System.out.println("commonname:"+userName+";age:9106##profile9支持自定義namespace用于進行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的Group或DataID的配置。Namespace的常用場景配置的情況下,默認使用的是Nacos上Public支持自定義GroupGroup是組織配置的維度之一。通過一個有意義的字符串(如Buy或Trade)對配置集進行分組,從而區(qū)分DataID相同的配置集。當您在Nacos上創(chuàng)建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認采用DEFAULT_GROUP支持自定義namespace用于進行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的Group或DataID的配置。Namespace的常用場景配置的情況下,默認使用的是Nacos上Public支持自定義GroupGroup是組織配置的維度之一。通過一個有意義的字符串(如Buy或Trade)對配置集進行分組,從而區(qū)分DataID相同的配置集。當您在Nacos上創(chuàng)建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認采用DEFAULT_GROUP。配置分組的常見場景:不同的應用或組件使用了相同的配置類型,如database_url配置和MQ_topic配置。配置的情況下,默認是DEFAULT_GROUP支持自定義擴展的DataIdDataID是組織劃分配置的維度之一。DataID集,每個配置集都可以被一個有意義的名稱標識。DataID通常采用類Java包(如com.taobao.tc.refund.log.level)的命通過自定義擴展的DataIdSpringCloudAlibabaNacosConfig目前提供了三種配置能力從NacosAspring.cloud.nacos.config.shared-configsDataIdBspring.cloud.nacos.config.ext-config[n].data-idDataIdC:通過內部相關規(guī)則(應用名、應用名ProfileDataId配置當三種方式共同使用時,他們的一個優(yōu)先級關系是:A<B<Cnacos-config-product.yamlnacos-config.yamlext-config:shared-dataids不同工程通用配置:common2.yml>1.5@Value注解可以獲取到配置中心的值,但是無法動態(tài)感知修改后的值,需要利用@RefreshScopeDataId#6#configexternalDataId15112.Nacos2.Nacos配置中心使用1publicclassConfigServerDemo2publicstaticvoidmain(String[]args)throwsNacosException,InterruptedExceptionStringserverAddr=StringdataId=Stringgroup=publicclassTestController4privateString7publicStringhello()return11132.2nacosconfigclient2.2nacosconfigclient配置中心核心接口獲取配置的主要方法是NacosConfigService類的getConfig方法,通常情況下該方法直接從本地文件中取得配置的值,如果本地文件不存在或者內容為空,則再通過HTTPGET方法從遠端拉取配置,并保存到本地快照中。當通7PropertiespropertiesnewConfigServiceconfigService=Stringcontent=configService.getConfig(dataId,group,configService.addListener(dataId,group,newListener()publicvoidreceiveConfigInfo(StringconfigInfo)System.out.println("===recieve:"+19publicExecutorgetExecutor()return2425//booleanisPublishOk=configService.publishConfig(dataId,group,content=configService.getConfig(dataId,group,//booleanisRemoveOk=configService.removeConfig(dataId,//////content=configService.getConfig(dataId,group,//43//4546過HTTP獲取遠端配置時,Nacos2.2.2過HTTP獲取遠端配置時,Nacos2.2.2Nacos可以通過以上方式注冊監(jiān)聽器,它們內部的實現均是調用ClientWorker類的addCacheDataIfAbsent中CacheData是一個維護配置項和其下注冊的所有監(jiān)聽器的實例,所有的CacheData都保存在ClientWorker類中的原子cacheMap中,其內部的核心成員有:2.2.3ClientWorker通過其下的兩個線程池完成配置長輪詢的工作,一個是單線程的executor,每隔10ms按照每3000個配置項為一批次撈取待輪詢的cacheData實例,將其包裝成為一個LongPollingTask提交進入第二個線程池executorServicenacos池executorServicenacosconfigserver配置服務端啟動時就會依賴DumpService的init方法,從數據庫中l(wèi)oad配置存儲在本地磁盤上,并將一些重要的元信息例如MD5值緩存在內存中。服務端會根據心跳文件中保存的最后一次心跳時間,來判斷到底是從數據庫dump全量配置數據還是部分增量配置數據(如果機器上次心跳間隔是6h以內的話)。全量dmp當然先清空磁盤緩存,然后根據主鍵ID每次撈取一千條配置刷進磁盤和內存。增量dmp近六小時的新增配置(包括更新的和刪除的),先按照這批數據刷新一遍內存和文件,再根據內存里所有的數據全量去比對一遍數據庫,如果有改變的再同步一次,相比于全量dmp的話會減少一定的數據庫IO和磁盤IO次數。發(fā)布配置的代碼位于CofigCotrller#plishConfig中。集群部署,請求一開始也只會打到一臺機器,這臺機器將配置插入Mysql中進行持久化。服務端并不是針對每次配置查詢都去訪問MyQL,而是會依賴dmp功能在本地文件中將配置緩存起來。因此當單臺機器保存完畢配置之后,需要通知其他機器刷新內存和本地磁盤中的文件內容,因此它會發(fā)布一個名為CofigDataChagvet的事件,這個事件會通過HTP調用通知所有集群節(jié)點(包括自身),觸發(fā)本地文件和內存的刷新。2.3.3客戶端會有一個長輪詢任務,拉取服務

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論