微服務(wù)初體驗(二):使用Nacos作為配置中心并集成Dubbo

前言

最近筆者在對微服務(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)行分組測試,如下圖

bootstrap.yml

接著打開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ù)如法炮制即可:


注意application.yml中未配置端口,但是項目啟動端口還是8011
測試Nacos自動刷新配置功能

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

新增測試Controller

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


新增配置
返回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


image.png

接下來新增接口服務(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é)果如下圖:


在消費者服務(wù)中編寫接口
總結(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注解,否則配置無法自動刷新

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容