Nacos(配置中心)
有關Spring Cloud Alibaba之前寫過四篇文章,這篇也是在上面專案的基礎上進行開發。
Spring Cloud Alibaba(2)---RestTemplate微服務專案
Spring Cloud Alibaba(3)---Nacos概述
Spring Cloud Alibaba(4)---Nacos(註冊中心)
另外有關配置中心,之前也詳細寫過Apollo配置中心,所以一些有關配置中心的理論知識,這裡就不在陳述,具體看下面文章
Apollo(3)--- SpringBoot整合Apollo
前言
有關Nacos客戶端的搭建和Nacos的介紹在 Spring Cloud Alibaba(2)---Nacos概述 都有講到,所以這裡不在陳述。這裡在上篇部落格專案基礎上(Spring Cloud Alibaba(4)---Nacos(註冊中心)),來實現配置中心的功能。
一、Nacos 服務端初始化
1、啟動Nacos客戶端
有關Nacos搭建我這裡不在陳述,上面部落格有寫,或者直接看官網如何搭建:Nacos 官網
sh startup.sh -m standalone
2、新增配置
啟動好Nacos之後,在Nacos新增如下的配置
具體含義下面會做介紹
二、springBoot整合Nacos(配置中心)
說明
這裡貼出的程式碼是在上篇部落格 Spring Cloud Alibaba(4)---Nacos(註冊中心) 中專案的基礎上新增。
1、pom.xml
<!--新增nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、Controller層
@RestController
@RequestMapping("api/v1/config")
public class ConfigTestController {
/**
* nacos獲取配置
*/
@Value("${user.name}")
private String name;
@RequestMapping("test-config")
public Object findByGoodsId() {
return name;
}
}
3、bootstrap.yml
spring:
application:
name: mall-goods
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos配置中心地址
file-extension: yaml #檔案擴充格式
profiles:
active: dev
4、測試
成功獲取Nacos配置的資料
三、Nacos配置管理的模型
對於Nacos配置管理, 通過Namespace, Group, DataId能夠定位到一個配置集。
1、配置管理模型概念
1)Namespace
(名稱空間)
名稱空間(namespace)可用於對不同的環境進行配置隔離. 例如: 可以隔離開發環境, 測試環境, 生成環境. 因為他們的配置可能各不相同. 或者是隔離不同的使用者, 不同的開發人員使
用同一個Nacos管理各自的配置, 可通過namespace進行隔離。不同的名稱空間下, 可以存在相同名稱的配置分組(Group)或配置項(Data Id)
預設值:public
2)Group
(配置分組)
配置分組就是上圖中的Group. 配置分組是對配置集進行分組. 通過一個有意義的字串(如: buy, trade)來表示. 不同的配置分組下可以有相同的配置集(Data ID)。
預設值:DEFAULT_GROUP
3)DataId
(配置集)
在系統中, 通常一個配置檔案, 就是一個配置集。一個配置集可以包含系統的各種配置資訊. 例如:一個配置集可能包含系統的資料來源、連線池, 日誌等級的配置資訊。每個配置集
都可以定義一個有意義的名稱, 就是配置集的Id, 即Data Id
4)配置項
配置集中包含的一個個配置內容, 就是配置項。 他代表具體的可配置的引數. 通常以key=value的形式存在.
2、通俗理解
這裡通俗去理解這幾個概念含義
Namespace: 代表不同的環境, 如: 開發、測試, 生產等
Group: 可以代表某個專案, 如XX就業專案, XX電商專案
DataId: 每個專案下往往有若干個工程, 每個配置集(DataId)是一個工程的主配置檔案(比如這裡的mall-goods.yaml就是一個配置集)
3、頁面理解
1)代表 Namespace(名稱空間),預設就建立好public,這裡建立好了一個dev
2)代表 Group(配置分組),這裡預設分組 DEFAULT_GROUP
3)代表 DataId(配置集),這裡有個配置mall-goods.yaml,配置集裡有配置項user.name: "我是張三的好朋友李四"
四、補充
1、為什麼要用bootstrap.yaml
為什麼用bootstrap.yaml而不用application.xml官方有說明
必須使用 bootstrap.properties 配置檔案來配置Nacos Server 地址
雖然 bootstrap.yaml 和 application.xml 都屬於配置檔案,功能也一樣。但技術上,bootstrap.yml由父Spring ApplicationContext載入。父ApplicationContext會在
application.yml之前被載入。當使用 Spring Cloud 的時候,配置資訊一般是從 config server 載入的,為了取得配置資訊(比如密碼等),你需要一些提早的或引導配置。
因此,把 config server資訊放在 bootstrap.yml,用來載入真正需要的配置資訊。
說明
bootstrap.properties 和 bootstrap.yaml到沒有什麼區別,只是格式上有點不一樣。
2、DataId(配置集)和微服務對於關係
我們在Nacos配置的配置集叫: mall-goods.yaml,它是如何和我們專案匹配上的呢?
我們再來看下我們的 bootstrap.yml 的配置
我們前面說了,通過namespace, group, dataId能夠定位到一個配置集。從這個配置中我們沒有去指明具體namespace,那就代表採用預設的 public。沒有制定group,
代表採用預設DEFAULT_GROUP。那麼配置集就為
${spring.application.name}.${file-extension:properties} #這裡就相當於 mall-goods.yaml
${spring.application.name}-${profile}.${file-extension:properties} # 這裡就相當於 mall-goods-dev.yaml
如果同時配置的話,mall-goods-dev.yaml會覆蓋mall-goods.yaml中的配置
3、補充
其實我這裡還有很多細節沒講,比如怎麼指定分組,指定名稱空間和一些其它規則,具體可以看官網說明,講的還挺清楚的。
官方講解:Spring Cloud Alibaba Nacos Config
還有一些Nacos叢集搭建、Naocos將資料儲存到mysql資料庫的知識,這裡也不說了。自己可以網上查查。
GitHub地址
:spring-cloud-alibaba-study
少說多做,句句都會得到別人的重視;多說少做,句句都會受到別人的忽視。(5)