前言
最近筆者在對微服務(wù)架構(gòu)進行學(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),進行客戶端請求的轉(zhuǎn)發(fā)谒亦,熔斷服務(wù)則使用Sentinel框架竭宰。后續(xù)會加入ElasticSearch+SpringSession,進行數(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進行分組測試,如下圖
接著打開Nacos的服務(wù)的web頁面杖狼,打開配置管理->配置列表,點擊右側(cè)新增按鈕妖爷,進行新增蝶涩。
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)中,詳細的版本可以去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指的是端口隨機裆站,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)用的接口,進行測試婚惫,測試結(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注解牲芋,否則配置無法自動刷新