服務(wù)配置:項目整合Nacos配置中心
基于阿里開源的Sentinel實現(xiàn)了服務(wù)的限流與容錯,并詳細介紹了Sentinel的核心技術(shù)與配置規(guī)則。簡單介紹了服務(wù)網(wǎng)關(guān),并對SpringCloud Gateway的核心架構(gòu)進行了簡要說明,也在項目中整合了SpringCloud Gateway網(wǎng)關(guān)實現(xiàn)了通過網(wǎng)關(guān)訪問后端微服務(wù)。
同時,也基于SpringCloud Gateway整合Sentinel實現(xiàn)了網(wǎng)關(guān)的限流功能,詳細介紹了SpringCloud Gateway網(wǎng)關(guān)的核心技術(shù)。在鏈路追蹤章節(jié),我們開始簡單介紹了分布式鏈路追蹤技術(shù)與解決方案,隨后在項目中整合Sleuth實現(xiàn)了鏈路追蹤,并使用Sleuth整合ZipKin實現(xiàn)了分布式鏈路追蹤的可視化 。
在消息服務(wù)章節(jié),我們介紹了MQ的使用場景,引入MQ后的注意事項以及MQ的選型對比,在項目中整合了RocketMQ,并給大家介紹了RocketMQ的核心技術(shù)。
在服務(wù)配置章節(jié),我們首先介紹了服務(wù)配置與Nacos作為配置中心的相關(guān)概念。接下來,我們就正式在項目中整合Nacos配置中心。
本章總覽
「注意:本章中在測試每個案例時,都需要啟動Nacos,Sentinel,ZipKin和RocketMQ。另外,本章對應(yīng)的Nacos配置(冰河親測的Nacos配置)放在了項目源碼的doc/nacos/config/chapter22目錄下,小伙伴們將Nacos的配置直接導(dǎo)入到Nacos的配置列表中,也可以按照文章自己手動實現(xiàn)。」
環(huán)境準(zhǔn)備?
分別在用戶微服務(wù)shop-user,商品微服務(wù)shop-product,訂單微服務(wù)shop-order和網(wǎng)關(guān)服務(wù)shop-gateway中的pom.xml文件中添加如下依賴。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
服務(wù)整合Nacos配置中心?
這里,我們將用戶微服務(wù),商品微服務(wù),訂單微服務(wù)和網(wǎng)關(guān)服務(wù)的配置信息都放在Nacos中。
「注意:將微服務(wù)的配置放在Nacos中時,就暫時不用微服務(wù)中的application.yml配置文件了,而是在項目中新建一個bootstrap.yml文件。因為配置文件的優(yōu)先級從高到低依次為:bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml。」
用戶微服務(wù)整合配置中心
(1)在用戶微服務(wù)shop-user的resources目錄下新建bootstrap.yml文件,文件內(nèi)容如下所示。
spring:
application:
name: server-user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: user_group
profiles:
active: dev
(2)啟動Nacos,在瀏覽器中輸入http://localhost:8848/nacos并登錄Nacos,選擇Nacos菜單中的配置管理-配置列表,如下所示。
(3)點擊配置列表界面中的 「+」 ,如下所示。
點開后的界面如下所示。
其中各個配置項的含義如下所示。
- Data ID就是配置集ID,通常情況下就是某個配置文件的ID,這個ID的命名遵循一定的規(guī)則,如下所示。
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
這里,對應(yīng)到用戶微服務(wù)的Data ID就是:server-user-dev.yaml。所以,對于用戶微服務(wù)來說,我們在Data ID中輸入server-user-dev.yaml。
- Group:配置分組,配置分組要與spring.cloud.nacos.config.group對應(yīng),用戶微服務(wù)的配置分組就是user_group。
- 描述:對當(dāng)前配置的簡單描述。例如,用戶微服務(wù)的開發(fā)環(huán)境配置。
- 配置格式:表示配置內(nèi)容所使用的文件格式,這里我們選擇YAML格式。
- 配置內(nèi)容:配置文件的內(nèi)容,這里我們直接將application.yml文件的內(nèi)容復(fù)制進去即可。
配置好之后的內(nèi)容如下所示。
配置好之后點擊頁面的發(fā)布按鈕,如下所示。
發(fā)布成功后會跳轉(zhuǎn)到配置管理-配置列表界面,如下所示。
(4)注釋掉用戶微服務(wù)shop-user的resources目錄下的application.yml文件中的內(nèi)容(重要,不要忘記)。
至此,就完成了修改用戶微服務(wù)的配置操作。
商品微服務(wù)整合配置中心
修改商品微服務(wù)的配置過程與修改用戶微服務(wù)的配置過程類似,只是部分配置項不同。
(1)在商品微服務(wù)shop-product的resources目錄下新建bootstrap.yml文件,內(nèi)容如下所示。
spring:
application:
name: server-product
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: product_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注釋掉商品微服務(wù)shop-product的resources目錄下的application.yml文件中的內(nèi)容(重要,不要忘記)。
訂單微服務(wù)整合配置中心
修改訂單微服務(wù)的配置過程與修改用戶微服務(wù)的配置過程類似,只是部分配置項不同。
(1)在訂單微服務(wù)shop-order的resources目錄下新建bootstrap.yml文件,內(nèi)容如下所示。
spring:
application:
name: server-order
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: order_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注釋掉訂單微服務(wù)shop-order的resources目錄下的application.yml文件中的內(nèi)容(重要,不要忘記)。
網(wǎng)關(guān)服務(wù)整合配置中心
修改網(wǎng)關(guān)服務(wù)的配置過程與修改用戶微服務(wù)的配置過程類似,只是部分配置項不同。
(1)在網(wǎng)關(guān)服務(wù)shop-gateway的resources目錄下新建bootstrap.yml文件,內(nèi)容如下所示。
spring:
application:
name: server-gateway
main:
allow-bean-definition-overriding: true
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: gateway_group
profiles:
active: dev
(2)在Nacos中的配置信息如下所示。
(3)注釋掉網(wǎng)關(guān)服務(wù)shop-gateway的resources目錄下的application.yml文件中的內(nèi)容(重要,不要忘記)。
查看Nacos中的配置
將用戶微服務(wù)、商品微服務(wù)、訂單微服務(wù)、網(wǎng)關(guān)服務(wù)的配置添加到Nacos中后,Nacos中的配置管理-配置列表如下所示。
整合Nacos配置中心測試?
(1)分別啟動Nacos、Sentinel、ZipKin、RocketMQ的NameServer和Broker。
(2)分別啟動用戶微服務(wù)、商品微服務(wù)、訂單微服務(wù)和網(wǎng)關(guān)服務(wù),如果啟動成功,基本就說明項目整合Nacos配置中心成功。
(3)啟動四個服務(wù)后,在瀏覽器中輸入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。
查看各個微服務(wù)中也會打印出相關(guān)的日志,如下所示。
- 用戶微服務(wù)會打印出如下信息。
獲取到的用戶信息為:{"address":"北京","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}
用戶微服務(wù)收到了訂單信息:{"address":"北京","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}
- 商品微服務(wù)會打印出如下信息。
獲取到的商品信息為:{"id":1001,"proName":"華為","proPrice":2399.00,"proStock":9999}
更新商品庫存?zhèn)鬟f的參數(shù)為: 商品id:1001, 購買數(shù)量:1
- 訂單微服務(wù)會打印出如下信息。
提交訂單時傳遞的參數(shù):{"count":1,"empty":false,"productId":1001,"userId":1001}
庫存扣減成功
- 網(wǎng)關(guān)服務(wù)會打印出如下信息。
執(zhí)行前置過濾器邏輯
執(zhí)行后置過濾器邏輯
訪問接口主機: localhost
訪問接口端口: 10001
訪問接口URL: /server-order/order/submit_order
訪問接口URL參數(shù): userId=1001&productId=1001&count=1
訪問接口時長: 1260ms
說明我們的項目中成功整合了Nacos的配置中心。