Nacos配置(配置中心)
Nacos服務配置中心之基礎配置
新建模塊
新建:cloudalibaba-config-nacos-client3377
,引入依賴:
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置bootstrap.yml
Nacos和Spring Cloud config一樣,在項目初始化的時候,要保證先從配置中心進行配置拉取,拉取配置之后,才能保證項目的正常啟動。
另外,SpringBoot中配置文件的加載,bootstrap.yml優先於application.yml。
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client # 構成 Nacos 配置管理 dataId字段的一部分
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
配置之后,3377服務將從localhost:8848上讀取后綴名為yaml的配置文件。
配置application.yml
spring:
profiles:
active: dev #表示開發環境
主啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
服務接口
@RestController
@RefreshScope //支持Nacos的動態刷新功能。
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
dataId的完整格式及新建配置
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
-
prefix
默認為spring.application.name
的值,也可以通過配置項spring.cloud.nacos.config.prefix
來配置。 -
spring.profiles.active
即為當前環境對應的 profile,參考 Spring Boot文檔。注意:當
spring.profiles.active
為空時,對應的連接符-
也將不存在,dataId 的拼接格式變成${prefix}.${file-extension}
-
file-exetension
為配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension
來配置。目前只支持properties
和yaml
類型。
綜上所述,按照我們的配置,最后的dataId結果應該為:
nacos-config-client-dev.yaml
我們選中配置列表,選擇新建配置,DataID就是我們剛剛得到的nacos-config-client-dev.yaml
。
新建配置完成之后是這樣:
測試
運行3377服務,調用接口http://localhost:3377/config/info
測試配置讀取是否成功。
另外,它支持動態刷新,當我們修改手動修改配置中心數據時,修改的配置會被動態刷新,自動讀取。
Nacos服務配置中心之分類配置
命名空間、DataId和Group的關系
Namespace默認為空串,公共命名空間(public),分組默認是DEFAULT_GROUP。
Nacos的數據模型如下:
namespace用於區分部署環境【開發、測試、生產】,創建三個不同的namespace相互隔離。
Group可以把不同的微服務划分到同一個分組中。
Service可以包含多個Cluster集群,Nacos默認Cluster是DEFAULT,Cluster是對指定微服務的一個虛擬划分。
Instance是微服務的實例。
三種方案的加載配置
Data Id的方案
保證命名空間相同,分組相同,只有Data Id不同
指定spring.profile.active
和配置文件的DataId
來使不同環境下讀取不同的配置。為了演示這個效果,我們總共新建以下兩個配置,保證它們命名空間相同,分組相同,只有Data Id不同:
nacos-config-client-dev.yaml
nacos-config-client-test.yaml
通過spring.profile.active
屬性就能進行多環境下配置文件的讀取,剛剛已經測試過dev環境,我們測試以下test環境,是否能夠讀取到:nacos-config-client-test.yaml
的配置呢,答案是肯定的,可以訪問:http://localhost:3377/config/info
測試一下。
spring:
profles:
active: test #表示測試環境
Group方案
保證命名空間相同,Data Id相同,只有分組不同
注意,這里我們需要在application.yml中指定profile為info,在bootstrap.yml指定group。
## bootstrap.yml
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEV_GROUP
## application.yml
spring:
profiles:
active: info
測試方法不用多說,在TEST_GROUP和DEV_GROUP之間切換,再訪問接口即可。
namespace方案
保證命名空間不同
新建兩個命名空間:dev和test。
如果需要指定命名空間,則指定yml中的namespace屬性即可。
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP
namespace: b09923bb-b822-4d4c-b75d-c5085b22bbe8
spring:
profiles:
active: dev #表示開發環境
將會從命名空間ID為b09923bb-b822-4d4c-b75d-c5085b22bbe8
的TEST_GROUP
組中,讀取nacos-config-client-dev
的配置文件。