官术网_书友最值得收藏!

6.4 Nacos實(shí)戰(zhàn)

6.4.1 Nacos與Spring Cloud的集成

在開始之前,我們需要將Nacos依賴項(xiàng)引入Spring Cloud項(xiàng)目中。引入Nacos依賴項(xiàng)的方式有兩種,一種是在pom.xml文件中引入org.springframework.cloud:spring-cloud-starter-alibaba-nacos-discovery(config)依賴項(xiàng),另一種是引入com.alibaba.cloud:spring-cloud-alibaba-dependencies依賴項(xiàng)。如果讀者需要在項(xiàng)目中使用Spring cloud Alibaba的其他組件,建議采用官方推薦的版本兼容方案,Spring Cloud與Nacos的版本依賴關(guān)系如圖6-6所示。

圖6-6 Spring Cloud與Nacos的版本依賴關(guān)系

讀者可以根據(jù)項(xiàng)目需要選擇對(duì)應(yīng)的版本。筆者在演示項(xiàng)目中均采用spring-cloud-starter-alibaba-nacos*的方式引入依賴項(xiàng)。

6.4.2 Nacos控制臺(tái)

我們可以通過瀏覽器打開Nacos的控制臺(tái)(控制臺(tái)地址:http://localhost:8848/nacos)。在登錄對(duì)話框輸入默認(rèn)的admin賬號(hào)、對(duì)應(yīng)的用戶名和密碼(均為nacos)后進(jìn)入管理界面,Nacos控制臺(tái)主界面如圖6-7所示。

圖6-7 Nacos控制臺(tái)主界面

在本章中,我們重點(diǎn)學(xué)習(xí)圖6-7左側(cè)導(dǎo)航欄的“配置管理”和“服務(wù)管理”兩個(gè)功能,關(guān)于這兩個(gè)功能的詳細(xì)介紹請(qǐng)參見6.4.3節(jié)和6.4.4節(jié)。下面我們對(duì)左側(cè)菜單欄中的菜單項(xiàng)做一個(gè)簡(jiǎn)單介紹。

權(quán)限控制主要用于管理Nacos的用戶和用戶的權(quán)限,Nacos權(quán)限控制界面如圖6-8所示。

圖6-8 Nacos權(quán)限控制界面

權(quán)限控制有如下3個(gè)主要功能:

(1)在“用戶列表”界面中,admin可以維護(hù)Nacos的用戶(新建、修改密碼、刪除用戶)。

(2)在“角色管理”界面中,可以將用戶與角色進(jìn)行綁定。

(3)在“權(quán)限管理”界面中,可以對(duì)角色進(jìn)行賦權(quán)。

通過以上功能,可以得知Nacos的權(quán)限體系是基于角色構(gòu)建的,接下來,我們使用管理界面來創(chuàng)建一個(gè)新用戶,并測(cè)試其權(quán)限體系。

首先,我們?cè)贜acos中創(chuàng)建一個(gè)名為readuser的用戶,并設(shè)置密碼,如圖6-9所示。

圖6-9 Nacos創(chuàng)建用戶

然后,我們創(chuàng)建一個(gè)新的角色名,并將該角色的權(quán)限設(shè)置為讀寫權(quán)限,如圖6-10所示。

圖6-10 Nacos創(chuàng)建角色

最后,我們將創(chuàng)建好的用戶賬號(hào)與角色進(jìn)行綁定,如圖6-11所示。

圖6-11 將用戶與角色進(jìn)行綁定

我們退出當(dāng)前處于登錄狀態(tài)的admin用戶,用新創(chuàng)建的readuser登錄,可以觀察到控制臺(tái)的菜單項(xiàng)發(fā)生了變化,即左側(cè)的權(quán)限管理菜單消失了。非admin用戶管理界面如圖6-12所示。

圖6-12 非admin用戶管理界面

下面我們針對(duì)圖6-12中的“命名空間”和“集群管理”兩個(gè)菜單項(xiàng)做簡(jiǎn)單介紹。

(1)命名空間,顧名思義,即維護(hù)Name Space的界面,命名空間界面如圖6-13所示。

圖6-13 命名空間界面

(2)集群管理,展示當(dāng)前Nacos服務(wù)器的運(yùn)行狀態(tài),集群管理界面如圖6-14所示。

圖6-14 集群管理界面

6.4.3 Nacos實(shí)現(xiàn)配置管理

在本節(jié)中,我們將在Nacos中添加新的配置項(xiàng),將微服務(wù)程序連接到Nacos服務(wù)器并讀取配置項(xiàng)。

配置項(xiàng)的添加操作可以通過“新建配置”頁面來完成,在該頁面添加所需配置項(xiàng),并單擊“發(fā)布”按鈕完成添加,Nacos創(chuàng)建新配置如圖6-15所示。

圖6-15 Nacos創(chuàng)建新配置

如6.2.2節(jié)所述,Nacos Config的概念與Spring Environment和PropertySource具有一致的代碼層抽象邏輯。當(dāng)Spring Boot應(yīng)用啟動(dòng)時(shí),應(yīng)用程序會(huì)主動(dòng)從Nacos讀取配置項(xiàng)并加載到Spring容器中。Nacos Config實(shí)現(xiàn)了配置項(xiàng)的環(huán)境隔離功能,當(dāng)Spring Boot應(yīng)用被部署到不同環(huán)境(開發(fā)、測(cè)試或生產(chǎn)環(huán)境)中時(shí),我們可以通過管理界面為不同的環(huán)境設(shè)置不同的配置項(xiàng),盡可能地減少代碼對(duì)環(huán)境的依賴,從而增強(qiáng)配置對(duì)代碼的透明性和可遷移性。

實(shí)現(xiàn)Nacos配置管理功能分為以下幾步:

(1)添加依賴項(xiàng)

按照3.1節(jié)的步驟創(chuàng)建Spring Boot項(xiàng)目并引入正確的Spring Cloud和Alibaba Spring Cloud版本依賴,再額外引入nacos-config-starter依賴項(xiàng)到pom.xml文件中,nacos-config-starter依賴項(xiàng)的具體代碼如下:

(2)約定命名規(guī)則

Nacos的DataID命名規(guī)則為:${prefix}-${spring.profile.active}.${file-extension},這些占位符的具體含義如下:

? prefix默認(rèn)為spring.application.name的值,也可以通過配置項(xiàng)spring.cloud.nacos.config.prefix來指定一個(gè)不同的值。

? spring.profile.active即當(dāng)前運(yùn)行的Spring Boot應(yīng)用的profile(通常表示所在環(huán)境),當(dāng)spring.profile.active為空時(shí)(即默認(rèn)),命名規(guī)則中對(duì)應(yīng)的連接符“-”也可以省去,變成prefix.{file-extension}。

? file-exetension為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項(xiàng)spring.cloud.nacos.config.file-extension來配置。目前只支持properties和YAML類型。

在本例中,DataID的值為broadview-demo.properties,為了與DataID相匹配,我們需要對(duì)Spring Boot示例程序的參數(shù)做相應(yīng)的修改,同時(shí)也需要為應(yīng)用指定Nacos Server的連接地址,以上兩項(xiàng)配置均需在bootstrap.properties中添加。筆者不建議在application.properties中添加配置中心地址,因?yàn)閎ootstrap.properties的加載優(yōu)先級(jí)高于application.properties,為了確保配置項(xiàng)初始化的正確順序,相關(guān)配置需要添加在bootstrap.properties文件中,配置項(xiàng)的代碼如下:

(3)運(yùn)行項(xiàng)目

運(yùn)行Spring Boot項(xiàng)目的main()方法,如果項(xiàng)目啟動(dòng)成功,將看到如圖6-16所示的項(xiàng)目啟動(dòng)日志。

圖6-16 項(xiàng)目啟動(dòng)日志

(4)引入外部配置項(xiàng)

我們?cè)诔绦蛑刑砑右粋€(gè)簡(jiǎn)單的Controller類,讀取Nacos中的配置項(xiàng)并返回,代碼如下:

在上述代碼中,我們通過@Value注解將外部配置注入Spring Boot應(yīng)用的上下文中,為了支持運(yùn)行期屬性的動(dòng)態(tài)刷新(在不重啟應(yīng)用的情況下刷新配置項(xiàng)),我們?cè)陬惷咸砑恿俗⒔釦RefreshScope。

打開瀏覽器,輸入訪問地址http://localhost:8080/nacos/config,瀏覽器打印結(jié)果如圖6-17所示,證明配置項(xiàng)已被正確加載。

圖6-17 瀏覽器打印結(jié)果

(5)配置刷新

進(jìn)入Nacos配置中心修改title和name這兩項(xiàng)配置的值,修改配置界面如圖6-18所示。

圖6-18 修改配置界面

修改完成后,查看Spring Boot服務(wù)日志,會(huì)看到配置項(xiàng)刷新的內(nèi)容,如圖6-19所示。

圖6-19 Spring Boot服務(wù)日志中配置項(xiàng)刷新的內(nèi)容

刷新步驟(4)中的瀏覽器界面,查看頁面變化,配置刷新后的界面如圖6-20所示。

圖6-20 配置刷新后的界面

Nacos還可以從profile層面做配置隔離(環(huán)境隔離),進(jìn)入Nacos配置中心創(chuàng)建新的DataID并命名為broadview-demo-qa.properties,profile的配置如圖6-21所示。

圖6-21 profile的配置

重新啟動(dòng)Spring Boot應(yīng)用(無代碼修改),在啟動(dòng)腳本中添加如下啟動(dòng)參數(shù):

該參數(shù)表示當(dāng)前微服務(wù)的profile為qa,因此,服務(wù)啟動(dòng)階段將從配置中心讀取profile=qa的配置文件,前述實(shí)驗(yàn)中使用默認(rèn)的profile,即沒有設(shè)置此啟動(dòng)參數(shù)。我們刷新頁面后看到如圖6-22所示的訪問QA profile的界面。

圖6-22 訪問QA profile的界面

目前所有的演示均基于Nacos的默認(rèn)設(shè)置,在默認(rèn)配置下我們采用standalone模式啟動(dòng)Nacos服務(wù)器,配置項(xiàng)的持久化方案也采用默認(rèn)的存儲(chǔ)方案。為了更進(jìn)一步了解Nacos的特性,接下來我們將以cluster集群模式啟動(dòng)Nacos,并將存儲(chǔ)方案改為MySQL。

首先需要安裝MySQL,具體安裝步驟請(qǐng)參照3.4.1.2節(jié)。在MySQL安裝完成之后,我們通過以下步驟在MySQL中創(chuàng)建Nacos的相關(guān)數(shù)據(jù)庫(kù)表:

(1)用root賬號(hào)連接MySQL,創(chuàng)建Nacos要使用的database命名為nacos,SQL語句如下:

(2)切換到nacos數(shù)據(jù)庫(kù)下,SQL語句如下:

(3)創(chuàng)建Nacos所需的數(shù)據(jù)庫(kù)表,建表語句所在的文件位于Nacos目錄下的Conf文件夾下,以下命令中的NACOS_PATH指Nacos編譯成功的目錄:

然后,可以運(yùn)行show tables命令查看數(shù)據(jù)庫(kù)表是否被正確創(chuàng)建。

(4)修改Nacos配置文件,使用MySQL存儲(chǔ)配置項(xiàng)。Nacos配置文件的路徑是{NACOS_PATH}/conf/application.properties,具體代碼如下:

(5)創(chuàng)建{NACOS_PATH}/conf/cluster.conf(集群配置文件)。

該目錄下有Nacos提供的cluster.conf.example文件作為參考,我們?cè)赾luster.conf中僅添加一個(gè)本地地址即可(以筆者為例,將本地IP地址192.168.1.3添加到該文件中)。

通過“startup.sh -m cluster”命令重新啟動(dòng)Nacos,打開配置中心頁面,由于Nacos底層存儲(chǔ)方案發(fā)生了變更,所以此前創(chuàng)建的DataID都不存在了,我們需要重新創(chuàng)建這些配置項(xiàng),在集群模式下增加配置,如圖6-23所示。

圖6-23 在集群模式下增加配置

配置增加完畢后,再次訪問Spring Boot應(yīng)用的Controller接口,應(yīng)用可以正確獲取配置項(xiàng),集群模式下的配置項(xiàng)獲取如圖6-24所示。

圖6-24 集群模式下的配置項(xiàng)獲取

檢查MySQL中的數(shù)據(jù),可以看到新添加的配置項(xiàng),MySQL的配置數(shù)據(jù)如圖6-25所示。

圖6-25 MySQL的配置數(shù)據(jù)

6.4.4 Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn)

為了實(shí)現(xiàn)服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn),我們需要?jiǎng)?chuàng)建兩個(gè)獨(dú)立的Spring Boot應(yīng)用,分別作為服務(wù)提供者和服務(wù)消費(fèi)者。由于篇幅原因,本節(jié)只對(duì)主要步驟進(jìn)行介紹,完整源碼請(qǐng)參考本書的GitHub主頁。

服務(wù)提供者的創(chuàng)建步驟如下:

(1)引入Nacos依賴,代碼如下:

(2)修改bootstrap.properties文件,指定當(dāng)前應(yīng)用的應(yīng)用名和Nacos的連接地址,具體代碼如下:

(3)創(chuàng)建Application啟動(dòng)類,并在類上添加@EnableDiscoveryClient注解(此注解來自Spring Cloud)。

(4)創(chuàng)建一個(gè)名為ServiceController的測(cè)試類,具體代碼如下:

(5)啟動(dòng)應(yīng)用,通過Nacos控制臺(tái)的“服務(wù)管理”的“服務(wù)列表”可以查看已注冊(cè)的服務(wù)名,服務(wù)注冊(cè)詳情如圖6-26所示。

圖6-26 服務(wù)注冊(cè)詳情

服務(wù)消費(fèi)者的創(chuàng)建步驟如下:

(1)引入與服務(wù)提供者相同的依賴項(xiàng)。

(2)修改bootstrap.properties,添加以下項(xiàng)目:

(3)創(chuàng)建啟動(dòng)類Application并添加EnableDiscoveryClient注釋(此注釋來自Spring cloud),在啟動(dòng)類中聲明一個(gè)具有負(fù)載均衡能力的RestTemplate類,我們可以通過RestTemplate類發(fā)起遠(yuǎn)程REST接口的調(diào)用請(qǐng)求。Application啟動(dòng)類的具體代碼如下:

(4)創(chuàng)建一個(gè)測(cè)試方法,在方法中向服務(wù)提供者發(fā)起一個(gè)遠(yuǎn)程調(diào)用,具體代碼如下:

(5)啟動(dòng)應(yīng)用,查看Nacos控制臺(tái)的“服務(wù)管理”的“服務(wù)列表”,服務(wù)注冊(cè)詳情如圖6-27所示。

圖6-27 服務(wù)注冊(cè)詳情

打開瀏覽器,訪問服務(wù)消費(fèi)者接口(筆者本地訪問路徑為http://localhost:10001/consumer/hello),可以看到如圖6-28所示的遠(yuǎn)程方法調(diào)用結(jié)果。

圖6-28 遠(yuǎn)程方法調(diào)用結(jié)果

本章中,筆者通過示例程序演示了Nacos的基礎(chǔ)功能,在實(shí)際工作中,特別是在大規(guī)模集群下,無論是服務(wù)注冊(cè)還是配置管理都面臨著非常大的技術(shù)挑戰(zhàn)。例如,跨中心的數(shù)據(jù)一致性問題、變更推送的延遲問題,以及Nacos集群本身的容災(zāi)能力等。本章介紹的Nacos知識(shí)點(diǎn)只是拋磚引玉,還請(qǐng)讀者在工作和學(xué)習(xí)中繼續(xù)探索更大更廣闊的Nacos應(yīng)用場(chǎng)景。

主站蜘蛛池模板: 牙克石市| 山丹县| 永福县| 河东区| 思茅市| 南靖县| 玉溪市| 元氏县| 闽侯县| 桂平市| 崇阳县| 内黄县| 广水市| 贵溪市| 南丰县| 茌平县| 鹤山市| 揭东县| 固始县| 淮滨县| 马边| 凤翔县| 景洪市| 自治县| 沙坪坝区| 禹州市| 商水县| 繁昌县| 洮南市| 泸西县| 西华县| 紫云| 郁南县| 额敏县| 长泰县| 南和县| 常德市| 崇礼县| 清新县| 陇西县| 西城区|