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