推薦:Spring Cloud 整合 Nacos 實(shí)現(xiàn)服務(wù)配置中心
不點(diǎn)藍(lán)字關(guān)注,我們哪來故事?

?正文如下?
在之前的文章 《Nacos 本地單機(jī)版部署步驟和使用》 中,大家應(yīng)該了解了 Nacos 是什么?其中 Nacos 提供了動(dòng)態(tài)配置服務(wù)功能
一、Nacos 動(dòng)態(tài)配置服務(wù)是什么?

官方是這么說的:
Nacos 動(dòng)態(tài)配置服務(wù)是什么?
動(dòng)態(tài)配置服務(wù)可以以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置。
動(dòng)態(tài)配置消除了配置變更時(shí)重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷。
配置中心化管理讓實(shí)現(xiàn)無狀態(tài)服務(wù)變得更簡(jiǎn)單,讓服務(wù)按需彈性擴(kuò)展變得更容易。
Nacos 控制臺(tái)的功能
Nacos 提供了一個(gè)簡(jiǎn)潔易用的 UI (控制臺(tái)樣例 Demo) 用來管理所有的服務(wù)和應(yīng)用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新狀態(tài)跟蹤在內(nèi)的一系列開箱即用的配置管理特性,更安全地在生產(chǎn)環(huán)境中管理配置變更和降低配置變更帶來的風(fēng)險(xiǎn)。
二、實(shí)戰(zhàn):Nacos 實(shí)現(xiàn)服務(wù)配置中心
下面通過兩個(gè)大模塊實(shí)現(xiàn):
在 Nacos 中新建或修改配置 在 Spring Cloud 應(yīng)用中加載 Nacos 配置
2.1 在 Nacos 新建配置
根據(jù)上篇文章?Nacos 本地單機(jī)版部署步驟和使用?,部署運(yùn)行 Nacos ,然后打開配置管理 - 配置列表頁(yè)面。地址:http://localhost:8848/nacos/index.html#/configurationManagement
點(diǎn)擊右上角創(chuàng)建按鈕,進(jìn)入新建配置頁(yè)面,新建配置如圖所示:

配置詳解:
Data ID:配置為config-service.yml。Data ID 是指定配置且保證全局唯一性。Group:默認(rèn)配置為DEFAULT_GROUP,不需要修改。配置格式:選擇 YAML 配置文件格式配置內(nèi)容:具體配置的內(nèi)容。這里簡(jiǎn)單配置了個(gè)鍵值對(duì),其實(shí)實(shí)際應(yīng)用場(chǎng)景,會(huì)配置包括存儲(chǔ)配置、端口配置和各種中間件配置等
Nacos Data ID 標(biāo)準(zhǔn)格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
其中:
prefix:默認(rèn)為spring.application.name的值spring.profiles.active:該案例為空,一般指定 dev test 等環(huán)境配置file-extension:配置內(nèi)容格式
2.2 創(chuàng)建 Spring Cloud 應(yīng)用
1、創(chuàng)建應(yīng)用
新建工程,工程名為:springcloud-nacos-config-sample
工程項(xiàng)目地址在:
Github:https://github.com/JeffLi1993/springcloud-learning-example/tree/master/springcloud-nacos-config-sample Gitee:https://gitee.com/jeff1993/springcloud-learning-example/tree/master/springcloud-nacos-config-sample
2、配置 pom 依賴
pom.xml 代碼如下:
"1.0"?encoding="UTF-8"?>
"http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">
????4.0.0
????springcloud
????springcloud-nacos-config-sample
????0.0.1-SNAPSHOT
????springcloud-nacos-config-sample?::?Nacos?服務(wù)配置中心案例
????
????
????????org.springframework.boot
????????spring-boot-starter-parent
????????2.3.2.RELEASE
????
????
????????
????????
????????????org.springframework.cloud
????????????spring-cloud-starter-alibaba-nacos-config
????????
????????
????????
????????????org.springframework.boot
????????????spring-boot-starter-web
????????
????????
????????
????????????org.springframework.boot
????????????spring-boot-starter-test
????????????test
????????
????????
????????????org.projectlombok
????????????lombok
????????????1.18.10
????????????true
????????
????
????
????????
????????????
????????????
????????????????org.springframework.cloud
????????????????spring-cloud-starter-alibaba-nacos-config
????????????????0.2.2.RELEASE
????????????
????????????
????????????
????????????
????????????????org.springframework.cloud
????????????????spring-cloud-dependencies
????????????????Hoxton.SR7
????????????????pom
????????????????import
????????????
????????
????
????
????????
????????????
????????????????org.apache.maven.plugins
????????????????maven-compiler-plugin
????????????????
????????????????????1.8
????????????????????1.8
????????????????
????????????
????????
????
其中依賴了:
Spring Cloud Alibaba Nacos Config 依賴 Spring Cloud Hoxton.SR12 版本依賴
3、創(chuàng)建配置文件
在應(yīng)用工程的 resources 目錄下,創(chuàng)建 application.yml 文件,填入如下信息:
server:
??port:?8083?#?服務(wù)端口
spring:
??application:
????name:?config-service?#?服務(wù)名稱
其中:
server.port指定了服務(wù)端口 8083spring.application.name指定了服務(wù)名稱config-service,要跟 Nacos 后臺(tái)新建配置的Data ID值保持一致。
為啥呢?因?yàn)榭匆幌?Nacos Config 源碼 org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator#locate 。源碼如下:
if?(StringUtils.isEmpty(dataIdPrefix))?{
????dataIdPrefix?=?env.getProperty("spring.application.name");
}
如果 Data ID 沒有配置,則讀取 spring.application.name 服務(wù)名稱配置。
繼續(xù)創(chuàng)建 bootstrap.yml 文件,填入以下信息:
spring:
??cloud:
????nacos:
??????config:
????????server-addr:?127.0.0.1:8848?#?Nacos?配置中心地址
????????file-extension:?yml?#?配置文件格式
其中:
nacos.config.server-addr指定了 Nacos 地址和端口nacos.config.file-extension指定了配置文件格式為 yml
4、創(chuàng)建測(cè)試類和啟動(dòng)類
新建 Spring Cloud 應(yīng)用啟動(dòng)類 ConfigApplication,代碼如下:
/**
?*?Spring?Boot?服務(wù)啟動(dòng)類
?*
?*?Created?by?bysocket.com?on?21/12/06.
?*/
@SpringBootApplication??//?Spring?Boot?應(yīng)用標(biāo)識(shí)
public?class?ProviderApplication?{
????public?static?void?main(String[]?args)?{
????????//?程序啟動(dòng)入口
????????//?啟動(dòng)嵌入式的?Tomcat?并初始化?Spring?環(huán)境及其各?Spring?組件
????????SpringApplication.run(ProviderApplication.class,args);
????}
}
然后新建測(cè)試控制類 ConfigController,代碼如下:
/**
?*?Config?案例
?*?
?*?Created?by?bysocket.com?on?21/12/07.
?*/
@RestController
@Slf4j
@RefreshScope
@Data
public?class?ConfigController?{
????@Value("${blog.name}")
????private?String?blogName;
????@GetMapping("/get")
????public?String?get()?{
????????return?"ConfigController#get?blog?name?=?"?+?getBlogName();
????}
}
代碼詳解如下:
@Value注解 :@Value 對(duì) Bean 的字段或者方法參數(shù)進(jìn)行標(biāo)注,職責(zé)是基于表達(dá)式給字段或方法參數(shù)設(shè)置默認(rèn)屬性值。通常格式是注解 + SpEL 表達(dá)式,如 @Value("SpEL 表達(dá)式")。@RefreshScope注解 :允許在運(yùn)行時(shí)動(dòng)態(tài)刷新 Bean 的 Scope 實(shí)現(xiàn)。如果 Bean 被刷新,則在下次訪問 Bean 即執(zhí)行方法時(shí),會(huì)創(chuàng)建一個(gè)新實(shí)例。這說明在應(yīng)用運(yùn)行時(shí),在 Nacos 控制臺(tái)修改了對(duì)應(yīng)配置的值后,會(huì)同時(shí)修改和生效該 Bean 這個(gè)值,達(dá)到動(dòng)態(tài)配置的效果。
5、運(yùn)行測(cè)試
啟動(dòng)上面的應(yīng)用,會(huì)在控制臺(tái)看到如下信息:
2021-12-09?20:11:43.399??INFO?13909?---?[-127.0.0.1_8848]?o.s.c.a.n.c.NacosPropertySourceBuilder???:?Loading?nacos?data,?dataId:?'config-service.yml',?group:?'DEFAULT_GROUP'
2021-12-09?20:11:43.400??INFO?13909?---?[-127.0.0.1_8848]?b.c.PropertySourceBootstrapConfiguration?:?Located?property?source:?[BootstrapPropertySource?{name='bootstrapProperties-config-service.yml'}]
這里可以看出,已經(jīng)加載了 Nacos 配置信息 dataId: 'config-service.yml' 和 group: 'DEFAULT_GROUP' 。
最后在瀏覽器打開地址 http://localhost:8083/get ,響應(yīng)如圖所示:

動(dòng)態(tài)配置測(cè)試
然后去 Nacos 控制臺(tái),配置列表點(diǎn)擊修改 config-service.yml 配置。將 www.bysocekt.com 改成 bysocket.com,然后確認(rèn)發(fā)布。如圖所示:

可以從控制臺(tái)看到如下日志:
2021-12-09?20:31:30.747??INFO?13909?---?[-127.0.0.1_8848]?o.s.c.e.event.RefreshEventListener???????:?Refresh?keys?changed:?[blog.name]
重新訪問下瀏覽器該地址 http://localhost:8083/get ,響應(yīng)如圖所示:

說明動(dòng)態(tài)刷新配置成功。
三、Nacos 實(shí)現(xiàn)分布式配置小結(jié)
本文詳細(xì)介紹了Spring Cloud 整合 Nacos 實(shí)現(xiàn)服務(wù)分布配置。關(guān)鍵兩點(diǎn):
如何在 Nacos 設(shè)置對(duì)應(yīng)的配置 如何在工程中通過依賴和注解關(guān)聯(lián)上對(duì)應(yīng)的外化配置
參考資料
官方案例:https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example 官方文檔:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html https://blog.didispace.com/spring-cloud-alibaba-nacos-config-2/
代碼示例地址
本文案例,可以查看開源項(xiàng)目 springcloud-learning-example 中的 springcloud-nacos-config-sample 模塊:
Github:https://github.com/JeffLi1993/springcloud-learning-example Gitee:https://gitee.com/jeff1993/springcloud-learning-example
以下系列教程推薦
《Spring Cloud 系列教程》https://www.bysocket.com/spring-cloud 《Spring Boot 2.x 系列教程》https://www.bysocket.com/springboot 《Elasticsearch 入門系列教程》
往期推薦
↓ 或加泥瓦匠微信,交流更多技術(shù)?↓

