前言
最近筆者在對微服務(wù)架構(gòu)進(jìn)行學(xué)習(xí),參考了各種項目的技術(shù)文章、框架文檔以及視頻網(wǎng)站,最終選擇使用Nacos+Dubbo+Gateway+Sentinel來搭建一個項目練手。其中Nacos作為服務(wù)的注冊發(fā)現(xiàn)中心兼配置中心,Dubbo作為RPC通訊框架來實現(xiàn)服務(wù)間的接口調(diào)用,而Gateway則作為網(wǎng)關(guān),進(jìn)行客戶端請求的轉(zhuǎn)發(fā),熔斷服務(wù)則使用Sentinel框架。后續(xù)會加入ElasticSearch+SpringSession,進(jìn)行數(shù)據(jù)的緩存分級,鏈路追蹤則使用Sleuth,其中還會組合分布式事務(wù)框架Seata,有興趣的朋友可以關(guān)注一下,項目地址:https://github.com/peachl/cloud-demo/tree/master#readme,長期更新。
使用Nacos作為配置中心
首先啟動Nacos,按照上篇文章的步驟,啟動Nacos服務(wù)和項目,訪問Nacos的web頁面。確保項目中的服務(wù)都注冊到注冊中心當(dāng)中了。在application.yml同級目錄下添加bootstrap.yml,在Spring boot項目中bootstrap.yml會比application.yml優(yōu)先初始化,所以我們需要在bootstrap.yml中引入Nacos官方指定的配置文件即可(上篇文章中已經(jīng)把Nacos作為配置中心的配置寫入了application.yml,現(xiàn)在只需要把它從applicaiton.yml中剪切出來即可,其中的spring:application:name會作為Nacos中新增配置時的Data ID,需要留意),再新增屬性gorup進(jìn)行分組測試,如下圖

接著打開Nacos的服務(wù)的web頁面,打開配置管理->配置列表,點擊右側(cè)新增按鈕,進(jìn)行新增。
Data ID:bootstrap.yml配置文件中spring:application:name對應(yīng)的名稱;
Group:指定分組(便于不同環(huán)境下的項目配置管理,因為筆者這里屬于測試,所以填寫的是和上文中的配置文件中g(shù)roup對應(yīng)的test一致);
描述:針對于該配置的描述;
配置格式:配置文件的格式,要和Data ID中的后綴格式一致(這里筆者用的是yml,那么下面就選擇yaml,注意該位置也可以選擇properties,但是必須和上面bootstrap.yml文件中的file-extension的值相匹配);
配置內(nèi)容:具體的配置內(nèi)容(這里筆者將項目中的application.yml中的配置全部拷貝至其中);

測試啟動consumer服務(wù),在application.yml中為空的時候,項目啟動端口還是如Nacos配置中的9011,說明項目依賴Nacos的配置中心成功,其他服務(wù)如法炮制即可:

測試Nacos自動刷新配置功能
新增一個測試Controller,然后加上@RefreshScope注解,表明該Controller中的配置數(shù)據(jù)為自動刷新。

編輯Nacos中的配置文件consumer新增相關(guān)參數(shù)type: test,訪問Controller,返回test。效果如下圖:


將Nacos中consumer.yml文件的type: test修改為type: prod,在不重啟項目的情況下重新訪問對應(yīng)的controller,效果如下圖:

集成Dubbo實現(xiàn)RPC通訊
因為Dubbo是屬于各個服務(wù)之間都要公用的依賴,所以將其引入cloud-common當(dāng)中,詳細(xì)的版本可以去mvnrepository搜索合適自己項目的
<!-- Dubbo依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
引入依賴后需要編寫消費者服務(wù)中的配置文件,將Dubbo服務(wù)注冊至Nacos,新增如下內(nèi)容,其中subscribed-services指的是生產(chǎn)者服務(wù),prot:-1指的是端口隨機(jī),registry:address:指的是Dubbo對應(yīng)的注冊中心那這里就應(yīng)該設(shè)置為Nacos

接下來新增接口服務(wù),項目類型為Maven項目,在項目中新增一個接口。并在cloud-provider(生產(chǎn)者)和cloud-consumer(消費者)pom.xml文件中都引入該模塊


在生產(chǎn)者實際服務(wù)中實現(xiàn)該接口對應(yīng)的方法

在服務(wù)消費者的Controller中引入該Service,并在該Service上加入@Reference注解,注意在引入jar包的時候選擇帶有Dubbo的,不要使用Jdk原生的

編寫消費者服務(wù)中測試Dubbo調(diào)用的接口,進(jìn)行測試,測試結(jié)果如下圖:

總結(jié)
至此Nacos的配置中心測試完畢,相關(guān)的自動刷新配置功能也已經(jīng)實現(xiàn)了。切記Nacos中的Data ID要和bootstrap.yml中的spring:application:name一致,其次Nacos中的配置格式要和bootstrap.yml中的file-extension參數(shù)一致,否則配置中心可能會失效,如果要實現(xiàn)自動刷新配置的話,需要在對應(yīng)的Controller上加入@RefreshScope注解,否則配置無法自動刷新